需求:报表需要把未有数据的日期也显示出来。
需要一张日历表和数据表:日历表 left join 数据表,则可以实现。
问题是,日历表怎么生成呢?其实只需要有一张连续数字的表就可以生成日历表。
方案一:通过系统内部表 master…spt_values
方案二:自定义日历表
方案一:
SELECT
CONVERT (VARCHAR (100),dateadd(d, number, GETDATE() - 14),23) AS cad_date
FROM
master.dbo.spt_values n
WHERE
n.type = 'p'
AND n.number <= 14
方案二:通过select和union all 来 生成连续数字表,从而得出日期
SELECT
CONVERT (VARCHAR (100),dateadd(d, number, GETDATE() - 14),23) AS cad_date
FROM
(SELECT d.number
from (SELECT 1 as number UNION all SELECT 2 UNION all SELECT 3 UNION all SELECT 4 UNION all SELECT 5
UNION all SELECT 6 UNION all SELECT 7 UNION all SELECT 8 UNION all SELECT 9 UNION all SELECT 10
UNION all SELECT 11 UNION all SELECT 12 UNION all SELECT 13 UNION all SELECT 14)as d) n
WHERE
n.number <= 14