Pivot oder Umsetzung einer Tabelle in SQL Server ohne GRUPPIERUNG DURCH
Muss ich eine pivot-Tabelle in SQL Server mit der folgenden Struktur:
CREATE TABLE table1 (
ColumnNumber int,
RowNumber int,
CellData nvarchar(50)
)
INSERT INTO table1 VALUES
(1, 1, 'Orange'),
(2, 1, 'Apple'),
(3, 1, 'Banana'),
(1, 2, 'Grape'),
(2, 2, 'Corn'),
(3, 2, 'Lemon'),
(1, 3, 'Tomato'),
(2, 3, 'Lettuce'),
(3, 3, 'Onion')
Brauchen und ich die daraus resultierende Tabelle wie folgt Aussehen:
So dass die Zellen in ColumnNumber
Zeile sind nun die Namen der Spalten der resultierenden Tabelle. Der schwierigste Teil ist, dass die Höhe der anderen Spalte zahlen ist variabel (so, jetzt haben wir 3 Spalten-Nummern, aber morgen könnte es sein, 6 oder 10).
Habe ich die PIVOT-Funktion, aber alle Beispiele sind eine GROUP BY
, und, wie man hier sehen kann, brauche ich etwas mehr wie eine "transpose" - excel-Funktion.
Dank !!
Erstellen von SQL dynamisch. Ja, es ist hässlich. Es ist jedoch erforderlich, da jede Abfrage hat eine Feste Form (z.B. bekannt Spaltennamen), die unabhängig von den Daten. Es gibt zahlreiche Beispiele online-Suche für "dynamische pivot" - z.B. stackoverflow.com/questions/10404348/...
Auch stackoverflow.com/questions/12430512/... , stackoverflow.com/questions/1984306/... , etc
Auch stackoverflow.com/questions/12430512/... , stackoverflow.com/questions/1984306/... , etc
InformationsquelleAutor Alvaro VS | 2013-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies kann erreicht werden, mithilfe der
PIVOT
Funktion. DieGROUP BY
wird funktionieren, weil Sie ein Indikator dafür, dass jeder macht, werden die Zeilen deutlich. Für Ihre Daten ist der Indikator derrowNumber
Spalte.Wenn Sie eine festgelegte Anzahl von Spalten, dann werden Sie wollen, hart-code, der Ihnen mittels einer statischen pivot. Der code ähnelt dem folgenden:
Sehen SQL Fiddle mit Demo.
In deinem Fall hast du angegeben, dass du eine unbekannte Anzahl von Spalten. Wenn dies Ihre situation, dann müssen Sie dynamisches sql verwenden, um den Aufbau der Liste der Spalten zum pivot. Ich zeigte die statische version, weil es macht es leichter zu konvertieren Sie den code für eine dynamische SQL.
Den Schlüssel zu der dynamischen sql-version ist immer die Liste der Spalten, die geschieht über eine Abfrage auf deine Tabelle und erstellen eine Zeichenfolge mit den Namen der Spalten. Dies geschieht mit Hilfe
FOR XML PATH
:Diese Liste wird dann ergänzt in der Abfrage-string, die Sie erzeugen, und der Letzte code ist dann:
Sehen SQL Fiddle mit Demo.
Beide geben das Ergebnis:
Obwohl, warum die Wahl der MIN-hier vs MAX in der anderen? Nur täglich Vorliebe oder hat es Auswirkungen auf die Semantik zu, oder?
Sie könnte entweder
min
odermax
da die aggregation geschieht auf einer Schnur. Sie werden beide das gleiche Ergebnis.Vielen Dank, das ist genau das, was ich suchte. Sorry, wenn es eine wiederholte Frage, aber ich fand keine andere Frage wie dieser.
Glücklich zu helfen!
InformationsquelleAutor Taryn