簡體   English   中英

SQL 將一些列名轉換為行值,將一個列名行值轉換為列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM