2 mmooqwsazx mmooqwsazx 于 2014.09.02 14:35 提问

一个分组SQL,如何使在查询不到结果的时候,得到一条数据

现在有一张xx表,表里面有如下的数据,字段名为create_date(如下1)
我用
select create_date, count(0) from xx where create_date BETWEEN date('2014-08-01') AND date('2014-09-01') group by create_date
去做个分组统计,得到了(如下2)的数据,没有19号的数据
问题:如何才能使统计的时候,即使没有19号的数据,也能得到一个0呢。

1:
create_date
2014-08-18
2014-08-20
2014-08-20
2014-08-20
2014-08-18
2014-08-20
2014-08-21
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22

2:
2014-08-18 2
2014-08-20 4
2014-08-21 1
2014-08-22 7

1个回答

fredrickhu
fredrickhu   Ds   Rxr 2014.11.18 08:44

用master..spt_values构造日期 然后与你的表LEFT JOIN就可以了

declare @startdate datetime,@enddate datetime
set @startdate='2014-08-01'
set @enddate='2014-09-01'
;with f1 as
(
select convert(varchar(10),dateadd(day,number,@startdate),120) as create_date
from
master..spt_values
where
datediff(day,dateadd(day,number,@startdate), @enddate)>=0
and number>=0
and type='p'
)

select a.create_date, isnull(count(0),0) from xx as a inner join f as b on a.create_date=b.create_date where a.create_date BETWEEN date('2014-08-01') AND date('2014-09-01') group by a.create_date

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!