簡體   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