Wie zu Transponieren, die ein resultset aus SQL
Ich bin mit Microsoft SQL Server 2008.
Ich habe eine Tabelle, die sieht ungefähr so aus:
|======================================================|
| RespondentId | QuestionId | AnswerValue | ColumnName |
|======================================================|
| P123 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P123 | 2 | 3 | TimesADay |
|------------------------------------------------------|
| P123 | 3 | 1.00 | SoapPrice |
|------------------------------------------------------|
| P465 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P465 | 2 | 1 | TimesADay |
|------------------------------------------------------|
| P465 | 3 | 0.99 | SoapPrice |
|------------------------------------------------------|
| P901 | 1 | N | CanBathe |
|------------------------------------------------------|
| P901 | 2 | 0 | TimesADay |
|------------------------------------------------------|
| P901 | 3 | 0.00 | SoapPrice |
|------------------------------------------------------|
Ich möchte flip die Zeilen zu Spalten, so dass diese Tabelle sieht wie folgt aus:
|=================================================|
| RespondentId | CanBathe | TimesADay | SoapPrice |
|=================================================|
| P123 | Y | 3 | 1.00 |
|-------------------------------------------------|
| P465 | Y | 1 | 0.99 |
|-------------------------------------------------|
| P901 | N | 0 | 0.00 |
|-------------------------------------------------|
(die Beispiel-Daten ist hier willkürlich aus, so dass seine dumme)
Der Quell-Tabelle ist eine temporäre Tabelle mit 70.000 Zeilen.
Was SQL würde ich schreiben müssen, das zu tun?
Update
- Ich weiß gar nicht, ob Angelpunkt ist der richtige Weg zu gehen.
- Ich weiß nicht, welche Spalte zu PIVOTIEREN.
- Der Dokumentation erwähnt
<aggregation function>
und<column being aggregated>
und ich will nicht zu aggregieren nichts.
Vielen Dank im Voraus.
- Haben Sie sah in
PIVOT
? msdn.microsoft.com/en-us/library/ms177410.aspx - von dem, was ich gesehen habe, der
PIVOT
Befehl, die Sie verwenden müssen, eine Aggregatfunktion. Ich will nicht eine Aggregatfunktion, ich möchte nur, dass die Werte umgedreht werden um.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist erforderlich, um eine Aggregat-Funktion, wenn Sie verwenden
PIVOT
. Da Ihr(RespondentId, QuestionId)
Kombination ist einzigartig, Ihre "Gruppen" haben nur eine Zeile verwenden, so können SieMIN()
als Aggregat-Funktion:Wenn eine Gruppe enthält nur eine Zeile, dann
MIN(value) = value
oder in anderen Worten: die Aggregat-Funktion wird die identity-Funktion.Sehen, wenn diese können Sie sofort loslegen. Verwendet zu haben, um mit CASE-Anweisungen zu machen, dass passieren, aber es sieht aus wie einige Ahnung von PIVOT in SQL Server jetzt.
PIVOT ist ein Anfang, aber die Sache mit den sql-Abfragen ist, dass Sie wirklich brauchen, zu wissen, welche Spalten zu erwarten, dass in der Ergebnismenge vor schreiben Sie die Abfrage. Wenn Sie nicht wissen, ist das Letzte mal ich überprüft, müssen Sie entweder resort zu den dynamischen sql-oder die client-app ruft die Daten zu tun, die pivot statt.