将ekstra加入数据集sql

时间:2015-02-12 12:31:59

标签: sql-server join sql-server-2012 dataset

首先,感谢帮助我解决这个问题的任何人。我正在使用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  

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

1 个答案:

答案 0 :(得分: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