/ / Próba transpozycji i utworzenia pliku przestawnego w T-SQL - sql-server, pivot, transpose, unpivot

Próba przeniesienia i utworzenia pliku przestawnego w T-SQL - sql-server, pivot, transpose, unpivot

Walczę z poleceniami univot i pivot, ale nie mogę tego naprawić. Chcę dokonać transpozycji przy użyciu języka Transact SQL z tabeli 1 do tabeli 2:

kliknij tutaj, aby zobaczyć moje tabele źródłowe i docelowe

Jak mogę to zrobić? Do tej pory doszedłem do tego:

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 ???

Ale polecenie pivot nie może się naprawić. Czy ktoś może mi pomóc?

BR, emphyrio

Odpowiedzi:

0 dla odpowiedzi № 1

Rozwiązałem zagadkę samodzielnie, używając tego T-SQL:

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

Teraz pozostaje tylko dynamiczna zmiana klauzuli IN komendy przestawnej. Ale to jest łatwe, teraz znalazłem rozwiązanie.

Emphyrio.