Ich kämpfe mit Unpivot- und Pivot-Befehlen, kann es aber nicht ganz richtig machen. Ich möchte mit Transact SQL aus Tabelle 1 in Tabelle 2 transponieren:
Klicken Sie hier, um meine Quell- und Zieltabellen anzuzeigen
Wie kann ich das erreichen? Bisher bin ich dazu gekommen:
SELECT CASE RIGHT(name, 1) WHEN "R" THEN CONVERT(nvarchar(6), Q) + "R"
WHEN "D" THEN CONVERT(nvarchar(6), Q) + "D"
ELSE CONVERT(nvarchar(6), Q) + "A" END AS Q1,
value, name
FROM (SELECT Q, a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD
FROM vw_VAT) src
unpivot (value FOR name IN (a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD)) sel
pivot ???
Aber der Pivot-Befehl kann ich nicht richtig bekommen. Kann mir jemand helfen?
BR, Emphyrio
Antworten:
0 für die Antwort № 1Ich habe das Rätsel mit diesem T-SQL selbst gelöst:
SELECT * FROM (
SELECT CASE RIGHT(name, 1) WHEN "R" THEN CONVERT(nvarchar(6), Q) + "R"
WHEN "D" THEN CONVERT(nvarchar(6), Q) + "D"
ELSE CONVERT(nvarchar(6), Q) + "A" END AS Q1,
CASE RIGHT(name, 1) WHEN "R" THEN LEFT(name, LEN(name) -1)
WHEN "D" THEN LEFT(name, LEN(name) -1)
ELSE name END AS name,
value
FROM (SELECT Q, a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD
FROM vw_VAT) src
unpivot (value FOR name IN (a1VAT, b1VAT, c1VAT, a1VATR, b1VATR, c1VATR, a1VATD, b1VATD, c1VATD)) up) main
pivot (SUM(value) FOR Q1 IN ([201501A], [201502A], [201503A], [201504A], [201501R], [201502R], [201503R], [201504R], [201501D], [201502D], [201503D], [201504D])) piv
Jetzt bleibt nur noch die IN-Klausel des Pivot-Befehls dynamisch zu ändern. Aber das ist jetzt einfach, ich habe die Lösung gefunden.
Emphyrio.