Sql server 将ekstra月加入数据集sql
首先,感谢所有帮助我解决这个问题的人。我使用的是SQL 2012 我有一行这样的数据: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
| 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我已更新了我的答案。