cod*_*gle 4 sql-server t-sql unpivot
我有一张大致像这样的桌子。
(Pk int, Year int, Week1, Week2, .., Week53)
每个“周”列中的值是销售数据。我想要做的是从第一个表格中创建一个新表格 -
(PK int, WeekYear, SalesData)
其中“WeekYear”是年份和周数的串联,SalesData 是前一个表中相应字段的相同 salesdata。(只是想暂时取消选择)
SELECT pk,
[1],
[2],
...
[1000]
FROM (SELECT * FROM SalesTable) st
PIVOT
(
AGGREGATE(pk) -- no idea what to use here
FOR pk IN [1],
[2],
...
[1000]
);
Run Code Online (Sandbox Code Playgroud)
我目前的尝试毫无意义,因为我不确定要在我的数据集上应用哪个聚合函数。我在辨别创建新专栏 YearWeek 的最佳方式时也遇到了一些麻烦。
这似乎是PIVOT 的一个明显用途(我需要转置表格)。但是,我在思考如何正确完成它时遇到了很多麻烦。这样做的最佳方法是什么?
对我来说,这听起来更像是 UNPIVOT。
SELECT SalesTable.Pk, CrossApplied.WeekYear, CrossApplied.Value
FROM SalesTable
CROSS APPLY (VALUES ('01'+CAST([Year] AS CHAR(40)), Week1),
('02'+CAST([Year] AS CHAR(40)), Week2),
('03'+CAST([Year] AS CHAR(40)), Week3),
.......)
CrossApplied (WeekYear, Value)
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以进行 UNPIVOT,但使用 CROSS APPLY 是我的最爱。我在这里举一个更一般的例子。