2014-08-30 20 views
1
ID  grp find 
534-1 A OK 
534-1 A Good 
534-1 B Good 
534-1 C OK 
534-2 A AVERAGE 

我想使用透視顯示上表中轉動的所有行的值,它應該顯示從上表中的所有值這樣如何使用SQL

ID  A   B   C  
534-1 OK  Good  OK  
534-1 Good  NULL  NULL 
534-2 Average NULL  NULL 

我使用下面的查詢

select * 
    from 
    #temp1 
    pivot(MAX(find) 
     for grp in ([A] 
    ,[B] 
    ,[C])) pvt 

但是,我得到以下輸出,這是缺少534-1的另一個值。

ID  A   B   C 
534-1 OK  Good  OK 
534-2 Average NULL  NULL 

任何人都知道我在這裏錯過了什麼?

+0

你顯示OK'和'Good'的'了'max'。這應該是'好',而不是'好'...編輯的問題。 – Andomar 2014-08-30 11:14:13

回答

2

請嘗試:

select ID,[A],[B],[C] 
from(
    select *,row_number() over (partition by grp order by grp) Col from #temp1 
)x pivot 
    (MAX(find) 
     for grp in ([A] 
     ,[B] 
     ,[C])) as y 

Example at SQL Fiddle.

+1

+1此方法通過添加Col列來工作。現在這個關鍵點在'ID,Col'上工作,如果一個'ID'有多個'grp',則允許多行。 – Andomar 2014-08-30 11:22:03

+0

謝謝@Andomar!爲評論和添加小提琴... – TechDo 2014-08-30 11:24:36

+0

謝謝。它按我的意圖工作,但我在這裏看到一個問題。我爲每個ID獲取一行爲'NULL' – Ravi 2014-08-30 12:47:51