加入ekstra月份的数据集sql



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

我有一行数据看起来像这样:

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

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

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

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

为了获得所需的结果,我通常会创建一个模板数据集/查询,以便它为我提供我想在报告中显示的所有值。

然后我将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

最新更新