SQL Server - 即使不存在数据也显示所有 ID 的所有日期

问题描述 投票:0回答:0

这些是我的要求:

  1. 对于所有 HHMemID,显示所有 StationID 及其相应的 DurationSec,如果原始表中没有匹配项,则为 0。
  2. 显示所有 HHMemID 和所有 StationID 的所有日期,如果没有匹配,则将 DurationSec 值设置为 0。

我正在使用 MS SQL Server,我能够使用下面的代码编写第一个要求的查询,但我无法获得第二个要求。

我尝试使用 LEFT OUTER JOIN 加入所有可能的日期值,但它为每个 HHMemID 返回重复日期,这不是我正在寻找的结果。

Original Table

Query result

请注意,黄色单元格来自查询,我需要像这样填写表格: What I want

SELECT 
    h.HHID, 
    h.HHMemID, 
    s.StationID, 
    h.[date],
    h.week_number,
    h.day_number,
    h.[Age Group 1], 
    h.[Age Group 2], 
    h.[Age Group 3], 
    h.[Weight],
    COALESCE(t.DurationSec, 0) AS DurationSec


    INTO #tmpUsageAllStation60Sec


FROM (
    SELECT 
        DISTINCT bb.HHID, 
        bb.HHMemID, 
        bb.[date], 
        bb.week_number, 
        bb.day_number, 
        bb.[Age Group 1], 
        bb.[Age Group 2], 
        bb.[Age Group 3], 
        bb.[Weight]

    FROM #tmpUsage60Sec bb

) h
CROSS JOIN (
    SELECT DISTINCT StationID
    FROM #tmpUsage60Sec
) s
LEFT JOIN #tmpUsage60Sec t ON h.HHMemID = t.HHMemID AND s.StationID = t.StationID AND h.[Date] = t.[Date] 
--LEFT OUTER JOIN #tmpUsage60Sec t2 ON t2.[Date] = h.[Date]
ORDER BY h.[Date], h.HHID, h.HHMemID, s.StationID

提前感谢您提供的任何提示或解决方案。

我尝试使用 LEFT OUTER JOIN 来连接所有可能的日期值,但它为每个 HHMemID 返回重复日期,这不是我要查找的结果。我还阅读了有关使用递归 CTE 生成日期列表然后加入它们的内容。不过,我无法将其合并到我现有的查询中。

sql-server join common-table-expression
© www.soinside.com 2019 - 2024. All rights reserved.