[英]SQL convert some column names to row values and one column name row values to column name
我有一個組織如下的表:
Year |Account | Location| Measure1 |Measure2 |Measure3
2020 |123a |A |100 |20% |5
2020 |234b |B |75 |80% |8
2020 |122c |C |80 |78% |9
我想創建如下記錄:
Year |Account | Measure |A |B |C
2020 |123a |Measure1 |100 | |
2020 |
2020 |234b |Measure2 | |80% |
2020 |122c |Measure3 | | |9
這個論壇不是用來解決你的編程任務的。 但為了它的樂趣:
select Year, Account, 'Measure1' as Measure, Measure1 as A, null as B, null as C
from my_table
where Location = 'A'
union
select Year, Account, 'Measure2' as Measure, Measure2 as A, null as B, null as C
from my_table
where Location = 'A'
...
union
select Year, Account, 'Measure1' as Measure, null as A, Measure1 as B, null as C
from my_table
where Location = 'B'
...
我會推薦APPLY
:
select t.year, t.account, v.*
from t cross apply
(values ('Measure1', Measure1, null, null),
('Measure2', null, Measure2, null),
('Measure3', null, null, Measure3)
) v(measure, a, b, c);
這將返回除第二行之外的所有內容。 目前尚不清楚您想要什么邏輯,但您可以添加:
union all
select distinct t.year, null, null, null, null, null
明確地添加它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.