[英]Transpose columns into rows in SQL Server?
我有以下銷售表(SQL Server 2017)(每個商品大約有 20 行):
+---------+----------+-------------+-------+---------+------+
| good_id | store_id | week_number | promo | holiday | sale |
+---------+----------+-------------+-------+---------+------+
| 201712 | 255 | 1 | 1 | 0 | 2 |
+---------+----------+-------------+-------+---------+------+
| 201712 | 255 | 2 | 0 | 0 | 0 |
+---------+----------+-------------+-------+---------+------+
我想准備一個數據集,以便特定商店中的每種商品對應一行:
+---------+----------+---------------+---------------+---------+---------+-----------+-----------+--------+--------+
| good_id | store_id | week_number_1 | week_number_2 | promo_1 | promo_2 | holiday_1 | holiday_2 | sale_1 | sale_2 |
+---------+----------+---------------+---------------+---------+---------+-----------+-----------+--------+--------+
| 201712 | 255 | 1 | 2 | 1 | 0 | 0 | 0 | 2 | 0 |
+---------+----------+---------------+---------------+---------+---------+-----------+-----------+--------+--------+
我知道如何為具有唯一值的單列執行此操作:
SELECT *
FROM
(
SELECT [good_id],
[store_id],
[week_number],
[sale]
FROM table
WHERE good_id = 201712
AND store_id = 255
) AS SourceTable PIVOT(AVG([sale]) FOR [week_number] IN([1],
[2])) AS PivotTable
但是我要怎么寫我需要的代碼,我還看不懂
您可以使用條件聚合:
select good_id, store_id,
max(case when week_number = 1 then promo end) as promo_1,
max(case when week_number = 1 then holiday end) as holiday_1,
max(case when week_number = 1 then sale end) as sale_1,
max(case when week_number = 2 then promo end) as promo_2,
max(case when week_number = 2 then holiday end) as holiday_2,
max(case when week_number = 2 then sale end) as sale_2,
. . .
from table
group by good_id, store_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.