[英]Pivot table in SQL with multiple columns
我有這個數據
ID Month PRODUCT VALUE_1 VALUE_2
1234 1 a 34 12
1233 2 B 54
1245 3 c 23 42
1236 4 d 12 8
1238 1 a 56 5
1239 2 B 42 1
1234 3 c 32 6
1233 4 d 3
1245 1 a 8 6
1236 2 B 5 2
1238 3 c 1 6
1239 4 d 2
1234 1 a 15 4
1233 2 c 8 12
1245 3 d 15 6
1236 4 b 1 1
1238 1 c 14 10
1239 2 d 13 6
1234 3 c 13 17
1233 4 b 15 5
1245 1 c 18 11
1236 2 d 12 15
1238 3 c 8 12
1239 4 a 17 4
並試圖達到這一點:
SUM a b c d
ID a_1 a_2 a_3 a_4 b_1 b_2 b_3 b_4 c_1 c_2 c_3 c_4 d_1 d_2 d_3 d_4
1233 0 0 0 0 0 54 0 15 0 8 0 0 0 0 0 0
1234 49 0 0 0 0 0 0 0 0 0 45 0 0 0 0 0
1236 0 0 0 0 0 5 0 1 0 0 0 0 0 12 0 12
1238 56 0 0 0 0 0 0 0 14 0 9 0 0 0 0 0
1239 0 0 0 17 0 42 0 0 0 0 0 0 0 13 0 2
1245 8 0 0 0 0 0 0 0 18 0 23 0 0 0 15 0
基本上,我想查看每個月匯總的每個產品價值;
在 python 中,只需一行代碼。
data.pivot_table(index=['ID'], columns=["Product","Month"],
values=["Value_1","Value_2"],
aggfunc=np.sum,
dropna = False, fill_value=0)
我試過這個:
WITH pivot_table as (SELECT * FROM
(
SELECT ID, PRODUCT,Value_1,Value_2, Month
FROM DATASET
) New_dataset
PIVOT (
--#2 aggregation
SUM(Value_1) as value1 , SUM(Value_2) as value2
--#3 Pivot_column
FOR PRODUCT IN ('a','b','c','d')
))
#as pivot_table
SELECT ID ,Month, SUM(value1_a) as a_1, SUM(value2_a) as a_2 FROM pivot_table
GROUP BY ID, Month
ORDER BY value_1
我已經到了這個表,它忽略了空格,仍然需要轉置
ID MONTH value1_a
1234 1 49
1238 1 56
1239 4 17
1245 1 8
但是我仍然需要為所有其他人運行並連接? 還是我必須寫所有的產品? 然后轉置? SQL 可能能夠在一個 go 中做到這一點,對吧? 還是我對 python 的方式有很多想法?
我仍然需要為所有其他人運行並連接嗎? 還是我必須寫所有的產品? 然后轉置? SQL 可能能夠在一個 go 中做到這一點,對吧?
下面的解決方案使它
execute immediate (
select '''select * from (select id, lower(product) || '_' || month product_month, value_1 from `project.dataset.table`)
pivot(sum(value_1) for product_month in ("''' || string_agg(product_month, '", "') || '''"))
order by id
'''
from (
select product || '_' || month product_month
from (select distinct lower(product) product from `project.dataset.table`)
cross join (select distinct month from `project.dataset.table`)
order by product_month)
);
如果應用於您問題中的示例數據 - output 是
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.