为每个日期创建包含每个员工记录的表

时间:2018-02-02 22:00:14

标签: sql-server

我需要在下表中填写一个日期范围,每个工作日每个员工只有一条记录,而不是假日。日期源是基本日历表。

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'

使用工作日过滤器而不是假日来迭代日期范围的最佳方法是什么?

1 个答案:

答案 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;