将 ekstra 月加入数据集 sql

Join ekstra months to dataset sql

首先,感谢所有帮助我解决这个问题的人。我正在使用 SQL 2012,

我有一行数据如下所示:

| myPK | Name| Month |  Value | 
   1      SB        1        500    
   2      SB        4        100    

所以我现在想要的是整年之间的月份(我有一个日期 table 包含有关日期的所有信息)。结果应该是:

|  Month  | Name |  Value | 
  1      SB         500
  2      SB         0        
  3      SB         0        
  4      SB         100        
  5      SB         0        
  6      SB         0  

如何添加原始数据集中没有的所有额外月份?

为了获得想要的结果,我通常会创建一个模板 dataset/query,这样它就能提供我想要在报告中显示的所有值。

然后我会 LEFT JOIN 到此模板以获取我的值并将任何 NULL 值替换为 0。

WITH ReportTemplate AS
(
    SELECT DISTINCT
        Name
        , MonthNumber

    FROM
        MyTable
        CROSS JOIN
        (
            SELECT
                MonthNumber

            FROM
                MonthDate

            WHERE
                MonthNumber BETWEEN 1 AND 6
        ) AS Months
)
, ReportData AS
(
    SELECT
        Name
        , MonthNumber
        , SUM(Value) AS Value

    FROM
        MyTable

    GROUP BY
        Name
        , MonthNumber
)

SELECT
        t.Name
    ,   t.MonthNumber
    ,   ISNULL(d.Value, 0) AS Value

FROM
    ReportTemplate AS t
    LEFT JOIN ReportData aS d
        ON  t.Name = d.Name
            AND t.MonthNumber = d.MonthNumber