簡體   English   中英

在SQL中轉置兩列

[英]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列。

簡單的解決辦法是制造每個名稱類別組中,比如Name1Name2Name3 ,等等,你可以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 |

演示: http : //www.sqlfiddle.com/#!6/21499/7

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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