问题描述
- 一个分组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-222:
2014-08-18 2
2014-08-20 4
2014-08-21 1
2014-08-22 7
解决方案
用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