SqlServer 按日期查表,没有数据的日期显示为0
有数据表A,包含以下数据
日期 数量
-----------------------------
2015-07-17 1
2015-07-22 1
2015-07-23 2
2015-07-25 1
需要查询效果如下:
日期 数量
------------------------------
2015-07-17 1
2015-07-18 0
2015-07-19 0
2015-07-20 0
2015-07-21 0
2015-07-22 1
2015-07-23 2
2015-07-24 0
2015-07-25 1
思路:先找出日期范围,填补缺失的日期,然后与表A join,isnull(数量,0)
select b.date,isnull(a.num,0) from (
--按照日期范围填补缺失日期
select convert(varchar(10),dateadd(day,number,'2015-07-17'),120) as [date] from
master..spt_values
where
datediff(day,dateadd(day,number,'2015-07-17'), '2015-07-25')>=0
and number>=0 and type='p')b
left join a
on a.date=b.date
order by date
master..spt_values相当于一个数字辅助表,在sql中主要用到number这个字段,type也是master..spt_values表中的字段
select number from master..spt_values where type='p'
返回的是0-2047数字