假设:人员表,考勤表。
为每个人员生成考勤结果,每天一条记录,无论人员在表中有没有考勤数据,都有一条统计结果。
这样需要为每个人员创建包日期的虚拟临时表。
借用master中的表spt_values中的type='p'的记录;
测试SQL语句如下:
--初始日期: 2020-1-1
--天数: 7,即从0到7,共8天
select tab1.vn,tab21.date1
from (
select '张三' vn
union all
select '张四' vn
) tab1
inner join (
select tab2.date1
from (
SELECT
CONVERT(NVARCHAR(10), DateAdd(day, number, '2020-1-1'),120) AS date1
FROM
master..spt_values
WHERE type = 'p' AND number <= 7
) tab2 ) tab21 on 1=1
order by tab1.vn,tab21.date1
执行结果:
张三 2020-01-01
张三 2020-01-02
张三 2020-01-03
张三 2020-01-04
张三 2020-01-05
张三 2020-01-06
张三 2020-01-07
张三 2020-01-08
张四 2020-01-01
张四 2020-01-02
张四 2020-01-03
张四 2020-01-04
张四 2020-01-05
张四 2020-01-06
张四 2020-01-07
张四 2020-01-08
再将此结果,关联到统计结果即可。