Свести результат строки свойств SQL - PullRequest
4 голосов
/ 17 июня 2011

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) произвольно и может быть много.

Ответы [ 3 ]

3 голосов
/ 17 июня 2011

См. 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)
0 голосов
0 голосов
/ 17 июня 2011
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...