Как преобразовать данные строки в столбцы в SQL - PullRequest
1 голос
/ 08 июня 2010

Я посмотрел в сводку, но я думаю, что для этого требуется агрегатная функция, которая мне не нужна (я думаю).

Результат моего запроса:

    Name          Property Name        PropertyValue
   ----------      ----------            ----------
     lorem          Work Phone         000.111.2020
     ipsum          Email              test@email.com

К

Name          Work Phone                Email
----------    ----------            ----------
lorem        000.111.2020        test2@email.com
ipsum        001.101.2010        test3@email.com

Я не думаю, что мне следует использовать здесь сводку, потому что мне не нужно ничего агрегировать, я просто хочу, чтобы данные строк стали столбцом.

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

Использование:

  SELECT t.name, 
         MAX(CASE WHEN t.property = 'Work Phone' THEN t.value ELSE NULL END),
         MAX(CASE WHEN t.property = 'Email' THEN t.value ELSE NULL END)
    FROM TABLE t
GROUP BY t.name

Вы должны использовать агрегатные функции, иначе у вас будет несколько строк с NULL на месте.

2 голосов
/ 08 июня 2010

PIVOT требует агрегат, и да, вам нужен агрегат, если ваши данные были:

Name          Property Name        PropertyValue 
   ----------      ----------            ---------- 
     lorem          Work Phone         000.111.2020 
     lorem          Work Phone         999.999.9999
     ipsum          Email              test@email.com 

Учитывая, что вы знаете, что ваши данные уникальны, вы можете просто использовать MIN или MAX в своей оси.

Примечание: ваш пример выходных данных не совпадает с вашим exmaple.

http://cloudexchange.cloudapp.net/stackoverflow/q/2589

-- SO2993412

DECLARE @t AS TABLE (Name varchar(25), [Property Name] varchar(25), PropertyValue varchar(25))
INSERT INTO @t VALUES ('lorem', 'Work Phone', '000.111.2020')
    ,('ipsum', 'Email', 'test@email.com')

SELECT Name, [Work Phone], [Email]
FROM @t
PIVOT (MAX(PropertyValue) FOR [Property Name] IN ([Work Phone], [Email])) AS pvt
...