[英]Transposing Two Columns in SQL
我對SQL非常陌生。 我一直在這個網站上尋找這個問題的答案,但我做不到。 我有看起來像這樣的數據:
Code | Name
A | John
A | Bob
A | Chris
B | James
B | Jen
B | Teddy
我希望它建立一個查詢,將導致以下結果:
Code | Name | Name2 | Name3
A | John | Bob | Chris
B | James| Jen | Teddy
任何幫助將不勝感激。
解決方案是使用PIVOT
。 但是, PIVOT
旨在用於“類別”值,這意味着每個組具有相同的類別集。 每個組之間沒有類似的東西,例如“名稱索引”或其他任何東西。 因此,您無法正確識別PIVOT
列。
簡單的解決辦法是制造每個名稱類別組中,比如Name1
, Name2
, Name3
,等等,你可以PIVOT
上。 可以使用ROW_NUMBER()
子句來完成,如下所示:
select Code,
'Name' + cast(
row_number() over (partition by Code order by code)
as varchar(10)) as NameType,
Name
from table1
產生的結果如下所示:
| CODE | NAMETYPE | NAME |
|------|----------|-------|
| A | Name1 | John |
| A | Name2 | Bob |
| A | Name3 | Chris |
| B | Name1 | James |
| B | Name2 | Jen |
| B | Name3 | Teddy |
現在,您可以在NAMETYPE
列的PIVOT
群組之間共享一些東西:
select * from (
select Code,
'Name' + cast(
row_number() over (partition by Code order by code)
as varchar(10)) as NameType,
Name
from table1
) a
pivot ( max(Name) for [NameType] in ([Name1], [Name2], [Name3]) ) piv
這將產生預期的結果:
| CODE | NAME1 | NAME2 | NAME3 |
|------|-------|-------|-------|
| A | John | Bob | Chris |
| B | James | Jen | Teddy |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.