只是为了好玩,这里有一个交叉应用解决方案:
SELECT
B.Department,
DateAdd(month, (B.Year - 1900) * 12 + M.Mo - 1, 0) [Date],
M.Balance
FROM
dbo.Budget B
CROSS APPLY (
VALUES
(1, Month1), (2, Month2), (3, Month3), (4, Month4), (5, Month5), (6, Month6),
(7, Month7), (8, Month8), (9, Month9), (10, Month10), (11, Month11), (12, Month12)
) M (Mo, Balance);
这实际上与 @Aaron Bertrand 的 UNPIVOT 没有什么不同,但没有使用 UNPIVOT。
如果您必须将日期作为字符串,则将字符串放入 CROSS APPLY 中,例如('01', Month1)
并将选择更改为Convert(char(4), B.Year) + M.Mo
.