Sql server 将ekstra月加入数据集sql

Sql server 将ekstra月加入数据集sql,sql-server,join,sql-server-2012,dataset,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

首先,感谢所有帮助我解决这个问题的人。我使用的是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

很抱歉我发的太快了,所以我把它写在C/P里,所以我把它改成了我的要求——我的错!我不确定它是否有效。结果是一样的。这就像我自己运行查询表单reporttemplate时,它仍然保留我的当前值。哦,我找到了它(必须从reporttemplate中输入months.MontNumber!这就找到了!非常感谢:)是的,我正要建议,因为我不知道您架构的全部细节。你能把这个标记为你的答案吗?即使没有该月的数据,你的值真的是500吗?您不希望它为0或NULL吗?对不起,是的,我希望它为0我已更新了我的答案。