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