См. MSDN: Использование PIVOT и 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, который будет работать для произвольного числа значений проп -
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)