繁体   English   中英

SQL - 即使没有可用数据,如何返回每个月的每一天

[英]SQL - How to return every day of month even with no data available

以下是我的初始查询及其返回的数据:

SELECT
    User
    ,Client
    ,Date
    ,Total
FROM SampleTable 
WHERE Date BETWEEN '20200101' AND '20200131'

初始查询结果

相反,我希望它在一个月中的每一天都包含一行,如下表所示:

预期查询结果

我已经有了一个标准的 ANSI 日期表; 但是,我一直无法找到包含还需要加入(用户/客户端)维度的解决方案:

希望我的桌子看起来像这样:

意外查询结果

我认为我的答案位于交叉应用/子查询 realm 的某处,但我是 SQL 的新手,所以我无法准确理解如何完成。 任何帮助,将不胜感激。 谢谢!

如果表中有所有日期,则可以将其用作来源。 然后是cross joinleft join

select uc.user, uc.client, d.date,
       coalesce(st.total, 0)
from (select distinct user, client
      from sampletable
     ) uc cross join
     (select distinct date
      from sampletable
     ) d left join
     sampletable st
     on st.user = uc.user and st.client = uc.client and
        st.date = d.date;

如果基表没有所有日期,您可以通过多种方式生成它们:

  • 使用日历表。
  • 使用递归 CTE。
  • 生成一堆数字并构建日期。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM