使用PIVOT水平SQL表数据

时间:2015-10-29 09:36:55

标签: sql sql-server sql-server-2008

我的SQL表是


  GUID               Step_ID        Value
----------------------------------------------
ADFE12-ASDER-...      1             10
ADFE12-ASDER-...      2             20
ADFE12-ASDER-...      3             30
ADFE12-ASDER-...      4             160
CD4563-FG567-...      1             20
CD4563-FG567-...      2             80
Q23RT5-GH678...       1             30
Q23RT5-GH678-...      2             80
Q23RT5-GH678-...      3             20

预期结果应为


GUID                  1        2        3        4
---------------------------------------------------
ADFE12-ASDER-...      10       20       30       160
CD4563-FG567-...      20       80      NULL     NULL
Q23RT5-GH678-...      30       80      20       NULL

这里我需要根据数据类型为GUID的列来获取详细信息。我尝试使用PIVOT表但获得异常,因为我不能在GUID列上使用聚合函数。是否有任何其他替代方法或方法可用于获得上述预期结果。

2 个答案:

答案 0 :(得分:1)

试试这个:

select [GUID],[1],[2],[3],[4]
from
(
  select [GUID], Step_ID, Value
  from test
) d
pivot
(
  max(Value)
  for Step_ID in ([1],[2],[3],[4])
) piv;

<强> SQL FIDDLE DEMO

答案 1 :(得分:1)

你可以尝试手动转移,我没有方便的SQL Server来检查GUID上的行为,但这对我来说效果很好。

select  guid, 
        max(case when step_ID = 1 then value else null end) step_1,
        max(case when step_ID = 2 then value else null end) step_2,
        max(case when step_ID = 3 then value else null end) step_3,
        max(case when step_ID = 4 then value else null end) step_4
  from  your_table
  group by guid;

HTH