我需要在下表中填写一个日期范围,每个工作日每个员工只有一条记录,而不是假日。日期源是基本日历表。
CREATE TABLE [dbo].[SalaryEmpBase](
[resource_key] [nvarchar](20) NOT NULL,
[date] [datetime] NOT NULL,
[Hours] [decimal](4, 2) NOT NULL,
[HoursType] [nvarchar](4) NULL
) ON [PRIMARY]
GO
基本插入是:
INSERT INTO dbo.SalaryEmpBase ([resource_key],[date],[hours],[hourstype])
SELECT
resource_key, THISDate, 8, 'Base'
FROM
EMPTable
WHERE
comptype = 'Salary'
使用工作日过滤器而不是假日来迭代日期范围的最佳方法是什么?
答案 0 :(得分:0)
据推测,日历表中包含此信息,因此您只需使用cross join
即可。它看起来像这样:
INSERT INTO dbo.SalaryEmpBase ([resource_key],[date],[hours],[hourstype])
SELECT e.resource_key, c.Date, 8, 'Base'
FROM EMPTable e CROSS JOIN
Calendar c
WHERE e.comptype = 'Salary' AND
c.date >= @StartDate AND c.date <= @EndDate AND
c.is_holiday_flag = 0;