SQL-Server : dynamische pivot-über 5 Spalten
Ich habe eine sehr harte Zeit versucht, herauszufinden, wie zu tun, eine dynamische pivot in SQL Server 2008 mit mehreren Spalten.
Meine Beispiel-Tabelle wie folgt:
ID YEAR TYPE TOTAL VOLUME
DD1 2008 A 1000 10
DD1 2008 B 2000 20
DD1 2008 C 3000 30
DD1 2009 A 4000 40
DD1 2009 B 5000 50
DD1 2009 C 6000 60
DD2 2008 A 7000 70
DD2 2008 B 8000 80
DD2 2008 C 9000 90
DD2 2009 A 10000 100
DD2 2009 B 11000 110
DD2 2009 C 12000 120
und ich versuche, den Drehpunkt wie folgt:
ID 2008_A_TOTAL 2008_A_VOLUME 2008_B_TOTAL 2008_B_VOLUME 2008_C_TOTAL 2008_C_VOLUME 2009_A_TOTAL 2009_A_VOLUME 2009_B_TOTAL 2009_B_VOLUME 2009_C_TOTAL 2009_C_VOLUME
DD1 1000 10 2000 20 3000 30 4000 40 5000 50 6000 60
DD2 7000 70 8000 80 9000 90 10000 100 11000 110 12000 120
Mein SQL Server 2008 query wird wie folgt um die Tabelle zu erstellen:
CREATE TABLE ATM_TRANSACTIONS
(
ID varchar(5),
T_YEAR varchar(4),
T_TYPE varchar(3),
TOTAL int,
VOLUME int
);
INSERT INTO ATM_TRANSACTIONS
(ID,T_YEAR,T_TYPE,TOTAL,VOLUME)
VALUES
('DD1','2008','A',1000,10),
('DD1','2008','B',2000,20),
('DD1','2008','C',3000,30),
('DD1','2009','A',4000,40),
('DD1','2009','B',5000,50),
('DD1','2009','C',6000,60),
('DD2','2008','A',7000,70),
('DD2','2008','B',8000,80),
('DD2','2008','C',9000,90),
('DD2','2009','A',10000,100),
('DD2','2009','B',11000,110),
('DD2','2009','C',1200,120);
Den T_Year
Spalte kann sich ändern in der Zukunft, aber die T_TYPE
Spalte ist in der Regel wissen,, so bin ich nicht sicher, ob ich kann mit einer Kombination der PIVOT-Funktion im SQL-Server mit dynamischen code?
Ich habe versucht, nach dem Beispiel hier:
aber ich landete mit mit seltsamen Ergebnissen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Um das Ergebnis zu erhalten, werden Sie benötigen, zu betrachten, unpivoting die Daten in der
Total
undVolume
Spalten, die erste vor der Anwendung der PIVOT-Funktion, um das endgültige Ergebnis. Mein Vorschlag wäre, zuerst schreiben Sie eine hart codierte version der Abfrage dann konvertieren, um dynamische SQL.Der UNPIVOT-Prozess wandelt diese mehrere Spalten in Zeilen. Es gibt ein paar Möglichkeiten, um UNPIVOT, können Sie mit der UNPIVOT-Funktion, oder Sie können die Verwendung von CROSS APPLY. Der code unpivot die Daten ähnlich:
Diese erhalten Sie Daten im format:
Dann können Sie die PIVOT-Funktion:
Nun, dass Sie die richtige Logik, können Sie konvertieren, um dynamische SQL:
Dadurch erhalten Sie eine Ergebnis:
leider sqlfiddle.com ist momentan nicht funktioniert, so kann ich nicht erstellen, ein Beispiel für Sie.
Die Abfrage erstellt durch dynamic SQL wäre:
Bitte versuchen: