首先,感谢帮助我解决这个问题的任何人。我正在使用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
如何在原始数据集中添加我没有的额外月份?
答案 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