2013-07-03 4 views
2

MS SQL Server 2012Transposer certaines colonnes à l'aide des lignes pivot avec SQL

J'ai une table appelée indexrows

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

Je voudrais transposer ces résultats pour ressembler à ceci.

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

J'ai essayé la requête suivante sans succès. Je reçois cette erreur

Msg 156, niveau 15, état 1, ligne 10 Syntaxe incorrecte près du mot clé 'pour'.

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

Toute aide est appréciée.

Répondre

4

Il y a peu de choses sont mal à votre requête.

Tout d'abord, il vous manque une fonction d'agrégation sur votre PIVOT. Vous avez besoin d'un agrégat autour de propertyvalue.

Deuxièmement, vous devez entourer le $row1, etc avec des crochets non des guillemets simples.

Troisièmement, j'utiliser un alias différent pour le as pivot

En conséquence, le code sera:

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

Voir SQL Fiddle with Demo

2

Pivots besoin d'une fonction d'agrégation, parce que vous pourriez avoir plusieurs entrées dans la table d'origine. Si vous savez que vous n'avez qu'une seule valeur par clé, utilisez simplement MIN().

En outre, 'row1 de $', 'row2 de $', 'row3 de $' sont maintenant des colonnes et doivent être délimités comme des colonnes

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

anon-je obtenir l'erreur suivante avec votre requête Msg 156, Niveau 15 , State 1, Line 11 Syntaxe incorrecte près du mot clé 'pivot'. –

+0

J'ai négligé la troisième erreur dans votre exemple original: en utilisant le mot-clé «pivot» comme un alias. Ce n'est pas toujours une erreur, mais c'est toujours une mauvaise idée. – Anon

Questions connexes