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
- Pivot-SQL Abfrage - Datum in Spalte
- https://stackoverflow.com/questions/tagged/pivot+sql-server
- Wie man eine Pivot-Tabelle?
- SQL Fiddle-Beispiel
Die Eigentliche FrageTM
Das eigentliche problem versuche ich zu lösen, heute ist der screenshot mockup, das war mir die "business":
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 einerPIVOT
- 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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Denke, dass der pivot-operator als Ersatz Ihrer Gruppe durch. Hier ist ein Beispiel für die Muster #1 und 3: