如何使用sql转动所有行值

时间:2014-08-30 10:36:16

标签: sql sql-server tsql pivot

ID      grp  find
534-1   A    OK
534-1   A    Good
534-1   B    Good
534-1   C    OK
534-2   A    AVERAGE

我想使用pivot显示上表,它应该像这样显示上表中的所有值

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

任何人都知道我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

请尝试:

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.