SQL Server 2005
我有以下结果集:
ID name prop value
--------------------------
1 one Prop1 va1_1_1
1 one Prop2 val_1_2
2 two Prop1 val_2_1
2 two Prop2 val_2_2
3 three Prop2 val_3_2
4 four Prop1 val_4_1
4 four Prop2 val_4_2
如何展平它以获得
的输出ID name Prop1 Prop2
---------------------------------
1 one val_1_1 val_1_2
2 two val_2_1 val_2_2
3 three val_3_2 NULL
4 four val_4_1 val_4_2
注意:属性数量(Prop1
,Prop2
)是任意的,可以很多。
答案 0 :(得分:3)
请参阅MSDN: Using PIVOT and UNPIVOT。
它有一个非常好的例子,说明你要做的事情。
这将为您提供所需的结果。
Select *
From (
Select ID,name,prop,value
from YourTable
) P
PIVOT ( max(value) For Prop in (Prop1,Prop2) ) as pvt
Order By ID
请注意,您需要支持任意数量的道具值。在这种情况下,一种解决方案可以是动态构建此脚本并执行它。
修改强> 为了使其完整,这里的SQL适用于任意数量的prop值 -
Declare @Value as NVarChar(Max)
Set @Value = 'Select *
From (
Select ID,name,prop,value
from YourTable
) P
PIVOT ( max(value) For Prop in ('
Select @Value = @Value + Prop + ','
from ( Select Distinct Prop
From YourTable) YT
Set @Value = Left(@Value, Len(@Value)-1)
Set @Value = @Value + ') ) as pvt Order By ID'
Exec(@Value)
答案 1 :(得分:0)
SELECT ID,Name, (SELECT prop FROM table t1 WHERE prop=prop1 AND ID = table.id) AS Prop1,
(SELECT prop FROM table t2 WHERE prop=prop2 AND ID = table.id) AS Prop2
FROM table
答案 2 :(得分:0)