2013-07-03 5 views
2

MS SQL Server 2012Транспонирование несколько столбцов для строк, используя стержень с SQL

У меня есть таблица под названием indexrows

name displayname propertyvalue 
abc  $row1  agg 
abc  $row2  spx 
abc  $row3  qqq 
def  $row1  spx 
def  $row2  qqq 

Я хотел бы перенести эти результаты, чтобы посмотреть, как это.

name $row1 $row2 $row3 
abc  agg spx qqq 
def  spx qqq 

Я пробовал следующий запрос без успеха. Я получаю эту ошибку

Msg 156, Level 15, State 1, Line 10 Неверный синтаксис рядом с ключевым словом 'for'.

select * 
from (
select 
name,propertyvalue, displayname 
from indexrows 
) a 
PIVOT 
(
propertyvalue 
for [displayname] in ('$row1', '$row2', '$row3') 
) as pivot 

Любая помощь приветствуется.

ответ

4

В вашем запросе есть несколько вещей.

Во-первых, вам не хватает агрегатной функции на вашем PIVOT. Вам нужен агрегат около propertyvalue.

Во-вторых, вам необходимо окружить $row1 и т. Д. Квадратными скобками, а не одинарными кавычками.

В-третьих, я хотел бы использовать другой псевдоним для as pivot

В результате код будет:

select * 
from 
(
    select name, propertyvalue, displayname 
    from indexrows 
) a 
pivot 
(
    max(propertyvalue) 
    for [displayname] in ([$row1], [$row2], [$row3]) 
) piv; 

См SQL Fiddle with Demo

2

Повороты нужно агрегатную функцию, потому что вы могли бы иметь несколько записей в исходной таблице. Если вы знаете, что у вас есть только одно значение за ключ, просто используйте MIN().

Кроме того, '$ row1', '$ row2', '$ row3' теперь столбцы и должны быть разграничены как колоннах

select * 
from (
    select 
    name,propertyvalue, displayname 
    from indexrows 
) a 
PIVOT 
(
MIN(propertyvalue) 
for [displayname] in ([$row1], [$row2], [$row3]) 
) as pivot 
+0

Анон Я получаю следующую ошибку с вашим запросом Msg 156, Level 15 , State 1, Line 11 Неверный синтаксис рядом с ключевым словом «pivot». –

+0

Я упустил третью ошибку в вашем исходном примере: используя ключевое слово «pivot» в качестве псевдонима. Это может не всегда вызывать ошибку, но это всегда плохая идея. – Anon

Смежные вопросы