SqlServer 按日期查表,没有数据的日期显示为0

本文介绍了如何在Sql Server中查询数据表时,对于没有记录的日期填充为0。通过确定日期范围,插入缺失日期并使用JOIN与原表结合,使用ISNULL函数将空值转换为0,实现查询结果中每个日期都有记录,即使数量为0。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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数字



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值