Transponieren einige Spalten zu Zeilen mit pivot-mit SQL
MS SQL Server 2012
Ich habe eine Tabelle namens indexrows
name displayname propertyvalue
abc $row1 agg
abc $row2 spx
abc $row3 qqq
def $row1 spx
def $row2 qqq
Ich würde gerne transponieren diese Ergebnisse so Aussehen.
name $row1 $row2 $row3
abc agg spx qqq
def spx qqq
Ich habe versucht, die folgende Abfrage, ohne Erfolg. Ich bekomme diese Fehlermeldung
Msg 156, Level 15, Status 1, Zeile 10
Falsche syntax bei das Schlüsselwort 'für'.
select *
from (
select
name,propertyvalue, displayname
from indexrows
) a
PIVOT
(
propertyvalue
for [displayname] in ('$row1', '$row2', '$row3')
) as pivot
Jede Hilfe ist willkommen.
InformationsquelleAutor Jay C | 2013-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar Dinge sind falsch mit Ihrer Anfrage.
Erste, Ihnen fehlt eine Aggregat-Funktion auf Ihrem DREHPUNKT. Benötigen Sie ein Aggregat um
propertyvalue
.Zweitens müssen Sie die surround -
$row1
etc. mit eckigen Klammern keine Hochkomma.Dritten, würde ich einen anderen alias für die
as pivot
Als Ergebnis wird der code sein:
Sehen SQL Fiddle mit Demo
InformationsquelleAutor Taryn
Zapfen brauchen eine Aggregat-Funktion, da konnte man mehrere Einträge in der ursprünglichen Tabelle. Wenn Sie wissen, haben Sie nur einen Wert pro key, dann nur mit MIN().
Auch, '$row1', '$row2', '$row3' sind jetzt Spalten und müssen getrennt sein wie die Spalten
Habe ich übersehen der Dritte Fehler in deinem ursprünglichen Beispiel: mit dem Schlagwort "pivot" als alias. Dies kann nicht immer einen Fehler auslösen, aber es ist immer eine schlechte Idee.
InformationsquelleAutor Anon