/ / Versuchen Sie, in T-SQL zu transponieren und Pivot zu erstellen - sql-server, pivot, transpose, pivivot

Versuche, Pivot in T-SQL zu transponieren und zu erstellen - sql-server, pivot, transpose, pivivot

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 № 1

Ich 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.