- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我被要求将大型 Excel 日历转换为 SQL 表结构,以便我们可以将其功能包含在我们的内部应用程序中。为了更容易解释,我做了一个虚拟的例子:
这只是一个星期,但它会在一年中的所有星期中一直持续到最右边。你可以明白为什么这是大量的体力劳动。
这个日历告诉我们:
PlanningDay
是最重要的。
Employee
, 具有日期值并用 bool 值表示 AM 或 PM(AM 为真或假)。一个
PlanningDay
总是链接到一个
PlanningDayDetail
.
重要的是要知道,当在表 PlanningDay
中找不到条目时,应该显示默认的 OF(办公室),除非是周末)。 仅注册“异常(exception)”。
PlanningDayType
(如 Absent),以及更具体的名称和缩写,如 Holiday 和 HOL。
Employee
返回 1 行, 2 列(AM 和 PM)包含
DisplayName
链接到
PlanningDay
的详细信息(如果在那个日期 AM/PM 注册了一个),用于介于开始和结束日期参数之间的每个日期。基本上和Excel完全一样。
CREATE TABLE [Mrd].[Employee]
(
[Id] INT IDENTITY(1,1) CONSTRAINT [PK_Mrd_Employee_Id] PRIMARY KEY,
[FirstName] NVARCHAR(100) NOT NULL,
[LastName] NVARCHAR(100) NULL,
)
CREATE TABLE [Mrd].[PlanningDay]
(
[Id] INT IDENTITY(1,1) CONSTRAINT [PK_Mrd_PlanningDay_Id] PRIMARY KEY,
[EmployeeId] INT NOT NULL,
[Date] DATE NOT NULL,
[AM] BIT NOT NULL,
[PlanningDayDealId] INT NOT NULL,
CONSTRAINT [FK_Mrd_PlanningDay_PlanningDayDealId_Mrd_PlanningDayDetail_Id]
FOREIGN KEY ([PlanningDayDealId])
REFERENCES [Mrd].[PlanningDayDetail] ([Id]),
CONSTRAINT [FK_Mrd_PlanningDay_EmployeeId_Mrd_Employee_Id]
FOREIGN KEY ([EmployeeId])
REFERENCES [Mrd].[Employee] ([Id])
)
CREATE TABLE [Mrd].[PlanningDayDetail]
(
[Id] INT IDENTITY(1,1) CONSTRAINT [PK_Mrd_PlanningDayDetail_Id] PRIMARY KEY,
[PlanningDayTypeId] INT NOT NULL,
[Name] NVARCHAR(255) NOT NULL,
[DisplayName] NVARCHAR(3) NOT NULL,
CONSTRAINT [FK_Mrd_PlanningDayDetail_PlanningDayTypeId_Mrd_PlanningDayType_Id]
FOREIGN KEY ([PlanningDayTypeId])
REFERENCES [Mrd].[PlanningDayType] ([Id])
)
CREATE TABLE [Mrd].[PlanningDayType]
(
[Id] INT IDENTITY(1,1) CONSTRAINT [PK_Mrd_PlanningDayType_Id] PRIMARY KEY,
[Name] NVARCHAR(255) NOT NULL,
[ReportColor] NVARCHAR(10) NOT NULL
)
INSERT INTO [Mrd].[Employee] ([FirstName],[LastName])
VALUES
('Sandra','Cooper'),
('James','Adams'),
('Martha','Reid');
INSERT INTO [Mrd].[PlanningDayType] ([Name],[ReportColor])
VALUES
('Absent','#8b4789'),
('Consultancy','#c7c700');
INSERT INTO [Mrd].[PlanningDayDetail] ([PlanningDayTypeId],[Name],[DisplayName])
VALUES
(1,'New Year','HOL'),
(2,'Customer A','C-A');
INSERT INTO [Mrd].[PlanningDay] ([EmployeeId],[Date],[AM],[PlanningDayDealId])
VALUES
(1,'2018-01-01',1,1),
(1,'2018-01-01',0,1),
(2,'2018-01-01',1,1),
(2,'2018-01-01',0,1),
(3,'2018-01-01',1,1),
(3,'2018-01-01',0,1),
(2,'2018-01-03',1,2),
(2,'2018-01-03',0,2),
(2,'2018-01-04',1,2),
(2,'2018-01-04',0,2),
(2,'2018-01-05',1,2);
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
| Employee | 2018-01-01 AM | 2018-01-01 PM | 2018-01-02 AM | 2018-01-02 PM | 2018-01-03 AM | 2018-01-03 PM |
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
| Sandra Cooper | HOL | HOL | OF | OF | OF | OF |
| James Adams | HOL | HOL | OF | OF | C-A | C-A |
| Martha Reid | HOL | HOL | OF | OF | OF | OF |
+---------------+---------------+---------------+---------------+---------------+---------------+---------------+
DECLARE @StartDate DATE = '2018-01-01';
DECLARE @EndDate DATE = '2018-01-31';
WITH AllDays AS
(SELECT @StartDate AS [Day]
UNION ALL
SELECT DATEADD(DAY, 1, [Day])
FROM AllDays
WHERE [Day] < @EndDate)
SELECT ad.[Day] AS 'Date', pd.[AM], pdd.[DisplayName], e.[FirstName] + ' ' + e.[LastName] AS 'Employee'
FROM AllDays ad
LEFT JOIN [Mrd].[PlanningDay] pd
ON ad.[Day] = pd.[Date]
LEFT JOIN [Mrd].[PlanningDayDetail] pdd
ON pd.[PlanningDayDealId] = pdd.[Id]
LEFT JOIN [Mrd].[PlanningDayType] pdt
ON pdd.[PlanningDayTypeId] = pdt.[Id]
LEFT JOIN [Mrd].[Employee] e
ON pd.[EmployeeId] = e.[Id]
OPTION (MAXRECURSION 0);
+------------+------+-------------+---------------+
| Date | AM | DisplayName | Employee |
+------------+------+-------------+---------------+
| 2018-01-01 | 1 | HOL | Sandra Cooper |
| 2018-01-01 | 0 | HOL | Sandra Cooper |
| 2018-01-01 | 1 | HOL | James Adams |
| 2018-01-01 | 0 | HOL | James Adams |
| 2018-01-01 | 1 | HOL | Martha Reid |
| 2018-01-01 | 0 | HOL | Martha Reid |
| 2018-01-02 | NULL | NULL | NULL |
| 2018-01-03 | 1 | C-A | James Adams |
| 2018-01-03 | 0 | C-A | James Adams |
| 2018-01-04 | 1 | C-A | James Adams |
| 2018-01-04 | 0 | C-A | James Adams |
| 2018-01-05 | 1 | C-A | James Adams |
| 2018-01-06 | NULL | NULL | NULL |
| 2018-01-07 | NULL | NULL | NULL |
+------------+------+-------------+---------------+
PlanningDays
每人注册一次
Employee
.我首先要实现的是这个(对不起,列表太长):
+------------+----+-------------+---------------+
| Date | AM | DisplayName | Employee |
+------------+----+-------------+---------------+
| 2018-01-01 | 1 | HOL | Sandra Cooper |
| 2018-01-01 | 0 | HOL | Sandra Cooper |
| 2018-01-01 | 1 | HOL | James Adams |
| 2018-01-01 | 0 | HOL | James Adams |
| 2018-01-01 | 1 | HOL | Martha Reid |
| 2018-01-01 | 0 | HOL | Martha Reid |
| 2018-01-02 | 1 | OF | Sandra Cooper |
| 2018-01-02 | 0 | OF | Sandra Cooper |
| 2018-01-02 | 1 | OF | James Adams |
| 2018-01-02 | 0 | OF | James Adams |
| 2018-01-02 | 1 | OF | Martha Reid |
| 2018-01-02 | 0 | OF | Martha Reid |
| 2018-01-03 | 1 | OF | Sandra Cooper |
| 2018-01-03 | 0 | OF | Sandra Cooper |
| 2018-01-03 | 1 | C-A | James Adams |
| 2018-01-03 | 0 | C-A | James Adams |
| 2018-01-03 | 1 | OF | Martha Reid |
| 2018-01-03 | 0 | OF | Martha Reid |
| 2018-01-04 | 1 | OF | Sandra Cooper |
| 2018-01-04 | 0 | OF | Sandra Cooper |
| 2018-01-04 | 1 | C-A | James Adams |
| 2018-01-04 | 0 | C-A | James Adams |
| 2018-01-04 | 1 | OF | Martha Reid |
| 2018-01-04 | 0 | OF | Martha Reid |
| 2018-01-05 | 1 | OF | Sandra Cooper |
| 2018-01-05 | 0 | OF | Sandra Cooper |
| 2018-01-05 | 1 | C-A | James Adams |
| 2018-01-05 | 0 | OF | James Adams |
| 2018-01-05 | 1 | OF | Martha Reid |
| 2018-01-05 | 0 | OF | Martha Reid |
+------------+----+-------------+---------------+
PlanningDay
在客户 A 等处注册咨询...现在我知道我可以使用 COALESCE 将 NULLS 转换为默认值,但在此之前,我需要为每个没有
PlanningDay
的员工提供 NULLS。已被注册。
最佳答案
我认为你非常接近解决方案。我只是重新调整了初始连接以使用 交叉连接 这将为 Day、AM/PM 和 Employee 的每个组合生成一行。生成后,现有 左连接 s 将插入您的计划日,您可以用您在问题中指定的默认值替换 NULL。
您可以在 SQL Fiddle 中尝试此操作
DECLARE @StartDate DATE = '2018-01-01';
DECLARE @EndDate DATE = '2018-01-31';
WITH AllDays AS (
SELECT @StartDate AS [Day]
UNION ALL
SELECT
DATEADD(DAY, 1, [Day])
FROM
AllDays
WHERE
[Day] < @EndDate
)
SELECT
ad.[Day] AS 'Date'
, Period.[AM]
, pdd.[DisplayName]
, e.[FirstName] + ' ' + e.[LastName] AS 'Employee'
FROM
AllDays ad
CROSS JOIN
(SELECT CAST( 0 AS BIT ) AS [AM] UNION ALL SELECT CAST( 1 AS BIT )) AS Period
CROSS JOIN
[Employee] e
LEFT OUTER JOIN
[PlanningDay] pd ON (
pd.[Date] = ad.[Day]
AND pd.EmployeeId = e.[Id]
AND pd.[AM] = Period.[AM]
)
LEFT OUTER JOIN
[PlanningDayDetail] pdd ON (pdd.[Id] = pd.[PlanningDayDealId])
LEFT OUTER JOIN
[PlanningDayType] pdt ON (pdt.[Id] = pdd.[PlanningDayTypeId])
ORDER BY
[Date], [Employee], [AM]
关于SQL Server : Creating A Complex Calendar View For Employees,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49515878/
我有一个使用 c++ 的大型代码库标题和许多std::complex对象。但现在我还想使用其他几个使用 fftw 的库( spinsfast 和 ) .不幸的是,混合这两种类型的复合体似乎与 gc
我是 Maxima 的新手,在文档中找不到如何对复数进行正式计算。当我使用未指定的变量时,Maxima 似乎假设它们是真实的: 例如,共轭(x)返回 x。 有没有办法解决这个问题? 提前致谢。 最佳答
我是学习大O表示法的新手,并想到了这个问题。复杂度 O(a * b) 的名称是什么?是线性复杂度吗?多项式?或者是其他东西。实现代码如下。 function twoInputsMult(a, b) {
我是学习大O表示法的新手,并想到了这个问题。复杂度 O(a * b) 的名称是什么?是线性复杂度吗?多项式?或者是其他东西。实现代码如下。 function twoInputsMult(a, b) {
这是我的 Complex 类,我重载了“+” class Complex(object): def __init__(self, real, imag): self.__ima
我正在使用 R5RS 标准的 Scheme 实现。 现在假设您必须找出一个元素 '(2 3 4) 是否在列表 '(1 2 3 4) 中。 至于示例,更严格地说,您希望: 1. (is-in? '(2
注意事项: 我正在使用 Apple LLVM 版本 6.0 (clang-600.0.56)(基于 LLVM 3.5svn)在 OSX 上编译 具体来说,我正在尝试从 LibIIR 编译一个整体源,这
这段fortran代码最初是用Fortran 77格式编写的(我稍后会展示它)。拿到后,我通过转换工具将其转换为f90免费格式。使用intel fortran编译器 ifort,编译和运行和以前一样好
我有一个实现用户定义的算术类型的MyType类。此类提供以下转换运算符 struct MyType { ... operator double() { return to_double
我目前正在使用 Cxx 来允许 Julia 代码与 C++ 库交互。我想做的一部分是在两个方向上有效地传递复杂数据的集合(通常是 vector )。也就是说,我想要以下内容: cv = [1 + 2i
假设我有一个名为“汽车”的实体。 我使用复杂类型来定义“引擎”部分。 [TableName("T_CAR")] public sealed class Car:IEngine { ... pu
我想使用 static_cast 将 complex 转换为 complex 。 Convert complex to complex 我正在尝试做与这篇文章相同的事情,但我需要使用 static_c
` ?
对于多项式方程求解器,最好将其模板化为任何可用类型: template class PolynomialEquation { public: private: array myEquatio
为了在 cython 中将实部与复部分开,我通常使用 complex.real 和 complex.imag 来完成这项工作。然而,这确实会在 html 输出中生成颜色为“python red”的代码
我的问题很简单: Are both "complex float" and "float complex" valid C? 两者似乎都被 gcc 接受而没有警告。 最佳答案 complex 是 co
以下声明有什么区别? 结构体 *ptr1=(结构体*)malloc(4*sizeof(结构体)); 结构体 (*ptr1)[4]=(结构体*)malloc(sizeof(结构体)); 哪个更好用? 最
我想创建一个 C++ 类的复数。这里是Complex.h(最基本的形式) #ifndef _COMPLEX #define _COMPLEX #include "TVector2.h" class C
我已经使用 Visual Studio 2012 和 NDepend 对我的解决方案进行了代码分析 对于方法 MethodA,Visual Studio 显示复杂度为 105,Ndepend 显示为
我的代码: #include using std::cin; using std::cout; using std::istream; using std::ostream; template cl
我在 swift3 中有以下代码,我正在使用 swift lint 对代码进行 linting。给出代码如下: func selectedMenuInLoggedOutState(sender
我是一名优秀的程序员,十分优秀!