即使没有记录,如何在日期范围内每天返回一行?

时间:2018-04-11 12:38:18

标签: sql sql-server

如果我有这样的数据:

| DateAndTime         | Amount |
|---------------------|--------|
| 2018-03-01 10:00:00 | 1      |
| 2018-03-01 10:15:00 | 1      |
| 2018-03-03 08:30:00 | 1      |

正如你所看到的...... 2018-03-02没有记录......

但是在我的搜索结果中,我希望聚合这样的图表:

| Date       | Total |
|------------|-------|
| 2018-03-01 | 2     |
| 2018-03-02 | 0     |
| 2018-03-03 | 1     |

我如何包含没有源数据的日期?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用递归cte方法

;with cte as (
    select min(cast(dates as date)) mindate, max(cast(dates as date)) maxdate
    from table t
    union all
    select DATEADD(day, 1, mindate) mindate, maxdate 
    from cte c
    where c.mindate < c.maxdate
)

select c.mindate as date, count(t.amt) Total  
from cte c left join table t 
           on t.dates = c.mindate 
group by c.mindate