如何在组中显示默认值?

时间:2012-07-03 05:21:39

标签: sql-server

我有这个查询

SELECT DATE,COUNT(DATE) FROM TABLE WHERE DATE BETWEEN DATE1 AND DATE2 GROUP BY DATE..

结果将是(对于2012年1月2日至2012年3月2日,即3个日期)

1/2/2012  5
2/2/2012  6
3/2/2012  9

有时如果计数为空则表示它没有显示日期,即

1/2/2012  5
             If (2/2/2012 is not there)
3/2/2012  9

我想列出所有日期。就像这样

1/2/2012  5
2/2/2012  0
3/2/2012  9

怎么做?

1 个答案:

答案 0 :(得分:4)

您可以使用CTE生成日期列表,并使用left join

; with  Dates as
        (
        select  cast('2012-01-01' as date) as dt
        union all 
        select  dateadd(day, 1, dt)
        from    Dates
        where   dateadd(day, 1, dt) < '2012-01-06'
        )
select  d.dt
,       count(yt.id)
from    Dates d
left join    
        YourTable yt
on      yt.Date = d.Dt
group by
        d.dt;

Live example at SQL Fiddle.