显示日期甚至零值SQL

时间:2018-08-10 10:30:14

标签: sql sql-server-2008

我有SQL查询:

SELECT Date, Hours, Counts FROM TRANSACTION_DATE

示例输出:

     Date        | Hours | Counts
   ----------------------------------
   01-Feb-2018   |   20  |   5 
   03-Feb-2018   |   25  |   3 
   04-Feb-2018   |   22  |   3 
   05-Feb-2018   |   21  |   2 
   07-Feb-2018   |   28  |   1 
   10-Feb-2018   |   23  |   1 

如果您看到的话,由于没有数据/空值,有几天会丢失,但是我希望显示丢失的日子,并且其值为零:

     Date        | Hours | Counts
   ----------------------------------
   01-Feb-2018   |   20  |   5 
   02-Feb-2018   |    0  |   0
   03-Feb-2018   |   25  |   3 
   04-Feb-2018   |   22  |   3 
   05-Feb-2018   |   21  |   2
   06-Feb-2018   |    0  |   0 
   07-Feb-2018   |   28  |   1 
   08-Feb-2018   |    0  |   0
   09-Feb-2018   |    0  |   0
   10-Feb-2018   |   23  |   1 

谢谢你。

1 个答案:

答案 0 :(得分:2)

您需要生成日期序列。如果没有太多,那么递归CTE是一种简单的方法:

with dates as (
      select min(date) as dte, max(date) as last_date
      from transaction_date td
      union all
      select dateadd(day, 1, dte), last_date
      from dates
      where dte < last_date
     )
select d.date, coalesce(td.hours, 0) as hours, coalesce(td.count, 0) as count
from dates d left join 
     transaction_date td
     on d.dte = td.date;