Mit PIVOT in SQL Server 2008
Sagen wir, ich habe einige Daten, die entweder in einer SQL Server 2008-Tabelle oder einer [Tabelle] typisierte variable:
author_id review_id question_id answer_id
88540 99001 1 719
88540 99001 2 720
88540 99001 3 721
88540 99001 4 722
88540 99001 5 723
36414 24336 1 302
36414 24336 2 303
36414 24336 3 304
36414 24336 4 305
36414 24336 5 306
Möchte ich zum abrufen der Daten als ein Ergebnis festgelegt, die wie folgt aussieht:
author_id review_id 1 2 3 4 5
88540 99001 719 720 721 722 723
36414 24336 302 303 304 305 306
Ich vermute, dass die PIVOT-operator ist, was ich brauche (nach dieser Beitrag, sowieso), aber ich kann nicht herausfinden, wie, um loszulegen, vor allem, wenn die Anzahl der question_id Zeilen in der Tabelle können variieren. Im obigen Beispiel sind es 5, aber in einer anderen Abfrage, die Tabelle kann aufgefüllt werden mit 7 verschiedenen Fragen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich, Sie wären besser dran, dies zu tun in der client. Genommen Sie an, Sie mithilfe von Reporting Services, Holen Sie sich die Daten wie pro Ihre erste Ergebnis fest und zeigt Sie über eine Matrix, mit author_id und review_id in der Zeile der Gruppe, question_id in der Spalte Gruppe, und MAX(answer_id) in der Mitte.
Einer Abfrage machbar, aber müssten Sie eine dynamische SQL-jetzt.
...so etwas wie:
exec
Zeile, und ersetzen Sie es mitselect @qry
Hier Sie haben große Beispiel und Erklärung.
In deinem Fall wäre es so:
Nur so zu variieren, die Liste ([1],[2],[3],[4],[5]) wäre der Aufbau dieser Abfrage in einem string (dynamisch) und anschließend ausführen.
Sehen diese Antwort
Im Grunde, Sie pre-überprüfen Sie die Daten, um die Spalten und dann dynamisch generieren der SQL-Anweisungen mit dynamischen pivot-Liste. Es gibt eigentlich keine nicht-dynamische Weg, weil die definition der Spalten in dem Satz, den Sie zurückgeben möchten, ist nicht festgelegt.