So transponieren Sie ein Resultset aus SQL

8

Ich verwende Microsoft SQL Server 2008.
Ich habe eine Tabelle, die ungefähr so ​​aussieht:

%Vor%

Ich möchte die Zeilen in Spalten umdrehen, damit diese Tabelle wie folgt aussieht:

%Vor%

(die Beispieldaten sind hier willkürlich zusammengestellt, also ist es albern)

Die Quellentabelle ist eine temporäre Tabelle mit ungefähr 70.000 Zeilen.
Zu welchem ​​SQL müsste ich dazu schreiben?

Aktualisieren

  • Ich weiß nicht einmal, ob PIVOT der richtige Weg ist.
  • Ich weiß nicht, welche Spalte zu PIVOTIEREN soll.
  • Die Dokumentation erwähnt <aggregation function> und <column being aggregated> und ich möchte nichts aggregieren.

Vielen Dank im Voraus.

    
funkymushroom 09.08.2011, 19:50
quelle

3 Antworten

7

Es ist erforderlich, eine Aggregatfunktion zu verwenden, wenn Sie PIVOT verwenden. Da Ihre (RespondentId, QuestionId) -Kombination jedoch eindeutig ist, haben Ihre "Gruppen" nur eine Zeile, so dass Sie MIN() als eine Aggregatfunktion verwenden können:

%Vor%

Wenn eine Gruppe nur eine Zeile enthält, dann MIN(value) = value , oder mit anderen Worten: Die Aggregatfunktion wird zur Identitätsfunktion.

    
Elian Ebbing 09.08.2011, 21:03
quelle
1

Sehen Sie, wenn dies Sie zum Start bringt. Früher mussten CASE-Anweisungen verwendet werden, um dies zu ermöglichen, aber es sieht so aus, als wäre jetzt eine Ahnung von PIVOT in SQL Server.

    
n8wrl 09.08.2011 19:52
quelle
0

PIVOT ist ein Anfang, aber die Sache mit sql-Abfragen ist, dass Sie wirklich wissen müssen, welche Spalten in der Ergebnismenge vor dem Schreiben der Abfrage zu erwarten sind. Wenn Sie das nicht wissen, müssen Sie beim letzten Überprüfungsvorgang entweder auf dynamic sql zurückgreifen oder der Client-App, die die Daten abruft, stattdessen die Verwendung des Pivots gestatten.

    
Joel Coehoorn 09.08.2011 20:28
quelle

Tags und Links