我有几个表需要转换成一个新表。我肯定 (un)pivot 是解决问题的方法。但是,我不确定使用单个查询将多个表中的数据反透视为单个表的最佳方法是什么。
这些表大致如下所示:
销售:Pk、Year、Week1、Week2、Week3、...Week52
数量:Pk、Year、Week1、Week2、Week3、...Week52
订单:Pk、Year、Week1、Week2、Week3、...Week52
... 等等
我想要的是格式的表格
汇总表:Pk、Year_Week、销售额、数量、订单
我已经从上一个问题(使用 PIVOT 将单年列和多周列转换为单年/周列)中学到了如何为单个表执行此操作。大致如下所示:
SELECT Pk, Sales FROM
(SELECT Pk, Wk1, Wk2, ..., Wk52
FROM Sales_Table) source
UNPIVOT
(
FOR Sales IN Wk1, Wk2, ..., Wk52
) upt
如何在一个查询中为多个表执行此操作?
我有一张大致像这样的桌子。
(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 的一个明显用途(我需要转置表格)。但是,我在思考如何正确完成它时遇到了很多麻烦。这样做的最佳方法是什么?