【发布时间】:2022-09-27 23:16:45
【问题描述】:
这是我的两张桌子:
- Table1 有开始日期和结束日期。
- Table2 具有 AllMonths 和 Month 和 Value 列。
创建这些表的脚本。
CREATE TABLE [dbo].[Table1](
[EmployeeId] [int] NULL,
[CompanyId] [int] NULL,
[StartDate] [datetime] NULL,
[EndDate] [datetime] NULL
) ON [PRIMARY]
INSERT INTO [dbo].[Table1] VALUES(12345,1205,\'2021-01-01 00:00:00.000\',\'2021-06-30 00:00:00.000\')
INSERT INTO [dbo].[Table1] VALUES(23211,1205,\'2021-01-01 00:00:00.000\',\'2021-05-31 00:00:00.000\')
INSERT INTO [dbo].[Table1] VALUES(23211,1205,\'2021-07-01 00:00:00.000\',\'2021-09-30 00:00:00.000\')
INSERT INTO [dbo].[Table1] VALUES(23141,1205,\'2021-01-01 00:00:00.000\',\'2021-11-30 00:00:00.000\')
INSERT INTO [dbo].[Table1] values(54333,1205,\'2021-01-01 00:00:00.000\',\'2021-05-31 00:00:00.000\')
INSERT INTO [dbo].[Table1] values(76553,1205,\'2021-01-01 00:00:00.000\',\'2021-12-31 00:00:00.000\')
INSERT INTO [dbo].[Table1] values(55555,1205,\'2021-08-01 00:00:00.000\',\'2021-09-30 00:00:00.000\')
INSERT INTO [dbo].[Table1] values(55555,1205,\'2021-11-01 00:00:00.000\',\'2021-11-30 00:00:00.000\')
CREATE TABLE [dbo].[Table2](
[EmployeeId] [int] NULL,
[CompanyId] [int] NULL,
[AllMonths] [int] NULL,
[Month] [int] NULL,
[Value] [int] NULL
)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,1,1)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,2,1)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,3,1)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,4,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,5,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,6,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,7,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,8,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,9,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,11,2)
INSERT INTO [dbo].[Table2] VALUES(23211,1205,NULL,12,2)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(23141,1205,1,NULL,NULL)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,1,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,2,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,3,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,4,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,5,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,6,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,7,1)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,8,2)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,9,2)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,11,2)
INSERT INTO [dbo].[Table2] VALUES(12345,1205,NULL,12,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,1,1)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,2,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,3,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,4,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,5,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,6,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,7,2)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,8,1)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,9,1)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,10,1)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,11,1)
INSERT INTO [dbo].[Table2] VALUES(54333,1205,NULL,12,1)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,1,1)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,2,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,3,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,4,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,5,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,6,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,7,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,8,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,9,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,10,2)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,11,NULL)
INSERT INTO [dbo].[Table2] VALUES(76553,1205,NULL,12,NULL)
我想要的输出是:
-
案例 #1:EmployeeId = 12345
AllMonths列为 NULL。StartdateJan 和EndDateJun。从 jan-jun 开始的所有这些月份在表 2 中具有相同的值。所以 \'EmployeeClass\' 的值为 1。 -
案例 #2:员工 ID = 23211
AllMonths列为 NULL。StartdateJan 和EndDateMay 和StartdateJuly 和EndDateSep. Jan-Mar 的值为 1,而 Apr-May 在表 2 中的值为 2。因此在输出中应将其拆分为两行,Jan-Mar 的“EmployeeClass”值为 1,Apr-May 的值为 2。July-Sep 的值为 2,因此 July-Sep 的值为 2。 -
案例 #3:EmployeeId = 23141
AllMonths列不为空。因此,AllMonths列中的 \'Final\' 值为 1。 -
案例 #4:员工 ID = 54333
AllMonths列为 NULL。StartdateJan 和EndDateMay。在表 2 中,jan 的值为 1,feb-may 的值为 2。因此在输出中应将其分成两行,Jan-Jan 的 \'EmployeeClass\' 值为 1,Feb-May 的值为 2 . -
案例 #5:员工 ID = 55555
表 1 中该员工的两行。但表 2 中没有行。因此,这些行在输出中将可用,且具有 \'EmployeeClass\' 值 \'NULL\'。
-
案例 #6:员工 ID = 76553
AllMonths列为 NULL。StartdateJan 和EndDateDec. jan 的值为 1,feb-oct 的值为 2,nov-dec 的值为 3,在表 2 中。所以在输出中它应该被分成三行, Jan-Jan \'EmployeeClass\' 的值为 1,Feb-Oct 的值为 2,Nov-Dec 的值为 \'NULL\'。
需要一些帮助来实现这一目标。
-
请创建包含示例数据的表格,其任务是从 excel 屏幕截图中重新创建它们。您可以使用Markdown Table Generator 之类的工具快速粘贴数据,并在编辑问题时创建一个降价表粘贴到此处。
-
我用添加的表格脚本编辑了问题
-
SQL服务器版本?另外,你有数字表或日历表吗?
-
Azure SQL Server ...因此寻找没有任何系统编号表的解决方案。
-
检查我的脚本。我在发布我的脚本后阅读了您的评论
标签: sql sql-server tsql