Wie Sie pivot-Spalte von Werten in Spalten?

habe ich durchsucht durch eine Menge von SQL-Pivot-Beispiel auf Stackoverflow, in Büchern, Online und im google, und ich kann immer noch nicht herausfinden, wie zu führen (wie ich es nennen würde) eine einfache pivot-Betrieb.

Beispiel 1

Beispieldaten:

Name     Class       Score
=======  ==========  ======
Nick     Chinese     80 
Nick     English     70 
Nick     Biology     85 
Nick     Maths       85
Kent     Chinese     80 
Kent     Maths       90 
Kent     English     70 
Kent     Biology     85 

Gewünschte Ausgabe 1 - Pivot-Klasse, zu aggregieren Namen

Name     Chinese     English   Biology  Maths
=======  ==========  ========  =======  ======
Nick     80          70        85       85
Kent     80          70        85       90

Hinweis:

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Score FROM Scores
GROUP BY Name
PIVOT BY Class

Gewünschte Ausgabe 2 - Pivot-Klasse, Gesamtergebnis

Name     Chinese     English   Biology  Maths
=======  ==========  ========  =======  ======
70                   Nick
70                   Kent
80       Nick        
80       Kent             
85                             Nick     Nick
85                             Kent
90                                      Kent

Hinweis:

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Name FROM Scores
GROUP BY Score
PIVOT BY Class

Gewünschte Ausgabe 3 - Pivot-durch die Partitur, aggregieren Sie die Namen

Name     70          80        85       90
=======  ==========  ========  =======  =====
Nick     English     Chinese   Biology  
Nick     English     Chinese   Maths
Kent     English     Chinese   Biology  Maths

Hinweis:

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Class FROM Scores
GROUP BY Name
PIVOT BY Score

Gewünschte Ausgabe 4 - Pivot-durch die Partitur, aggregieren Sie die Klasse

Class    70          80        85       90
=======  ==========  ========  =======  =====
Chinese              Nick
Chinese              Kent
English  Nick
English  Kent
Biology                        Nick
Biology                        Kent
Maths                          Nick     Kent

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Name FROM Scores
GROUP BY Class 
PIVOT BY Score

Gewünschte Ausgabe 5 - Pivot mit Namen, aggregieren Sie die Klasse

Class    Nick  Kent
=======  ====  ====
Chinese  80    80
English  70    70
Biology  85    85
Maths    85    90

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Score FROM Scores
GROUP BY Class
PIVOT BY Name

Gewünschte Ausgabe 6 - Pivot mit Namen, aggregieren Sie die Partitur

Score  Nick     Kent
=====  =======  =======
70     English  English
80     Chinese  Chinese
85     Biology  Biology
85     Maths    Biology
90              Maths

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT Class FROM Scores
GROUP BY Score
PIVOT BY Name

Hinweis: ich glaube nicht, dass ein single Abfrage, die ausführen können, alle diese Gelenke. ich bin mit dem sample-Daten-und sample-schwenkt, so verwenden Sie als Beispiele dafür, was PivotTabellen ich könnte durchführen möchten.

Ein Weiteres Beispiel

Ein weiteres Beispiel der Analyse einer log der Benutzer-Anmeldung in der Domäne:

LoginDate          Username  MachineName
=================  ========  ===========
20120901 8:49:22   iboyd     obsidian
20120901 9:10:19   nbach     president
20120901 13:07:18  nback     nichpc
20120902 8:58:38   iboyd     obsidian
20120202 9:14:44   nbach     president
20120902 18:34:43  iboyd     harpax
20120903 8:57:13   iboyd     obsidian
20120904 20:03:55  iboyd     harpax

Gewünschte Ausgabe 7 - Pivot nach Datum Teil LoginDate, aggregieren Benutzername:

Username  20120901   20120902  20120903  20120914
========  =========  ========  ========  ========
iboyd     obsidian   obsidian  obsidian  harpax
iboyd     obsidian   harpax    obsidian  harpax
nbach     president  president
nback     nichpc     president

In meinem Kopf Stelle ich mir die syntax würde sein:

SELECT MachineName FROM Logins
GROUP BY Username
PIVOT BY CONVERT(varchar(50), LoginDate, 112) --yyyymmdd format

Oder vielleicht:

SELECT MachineName FROM Logins
GROUP BY Username
PIVOT BY CAST(LoginDate AS DATE)

ich kann einfach nicht scheinen, um wickeln Sie meinen Kopf aus der PIVOT syntax, um SQL Server mitteilen, welche Werte in der Spalte werden sollte, Spalten und welche Spalten die Werte der aggregation geschieht über.

Jeder scheint zu wollen, hart-code die Spalten, oder ruft einige XML-Abfragen. ich will einfach nur eine pivot!


Siehe auch


Die Eigentliche FrageTM

Das eigentliche problem versuche ich zu lösen, heute ist der screenshot mockup, das war mir die "business":

Wie Sie pivot-Spalte von Werten in Spalten?

Werden könnte, wird ziemlich offensichtlich-Abfrage zu schreiben, wenn die SQL Server-syntax, waren ziemlich offensichtlich für mich:

SELECT 
    JobName, ShiftName, 
    Firstname+' '+Lastname+' - '+BankCode
FROM Transactions
GROUP BY JobName, ShiftName
PIVOT BY TransactionDate
  • PIVOT nicht automatisch erstellen-Spalten basierend auf Ihrer bestehenden Daten. Die Spaltennamen sind immer statisch in einer PIVOT - Anweisung (aber natürlich können Sie generieren Abfrage dynamisch auf der Grundlage der Werte, die es in Ihren Daten). Wenn Sie suchen, für "dynamic pivot" finden Sie einige Beispiel-code.
  • Gute Diskussion von pivot-finden Sie hier: stackoverflow.com/questions/12083079/... hat Auch eine Antwort, die ich zur Verfügung gestellt, das zeigt eine von mehreren Methoden für die Erstellung einer dynamischen PivotTabelle, die auf jede praktische Anzahl der Spalten.
InformationsquelleAutor Ian Boyd | 2012-09-05
Schreibe einen Kommentar