/ / Опитва да трансформира и създаде опорна точка в T-SQL - SQL Server, pivot, transpose, unpivot

Опитва да трансформира и създаде опорна точка в T-SQL - SQL Server, pivot, transpose, unpivot

Аз съм се борят с unpivot и pivot команди, но не може напълно да го прави. Искам да транспонирам с помощта на Transact SQL от таблица 1 до таблица 2:

кликнете тук, за да видите таблиците за източника и местоназначението си

Как мога да постигна това? Досега стигнах до това:

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

Но командата pivot не мога да се оправи. Може ли някой да ми помогне?

BR, emfyrio

Отговори:

0 за отговор № 1

Разреших самия пъзел, използвайки този 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

Сега остава единствено динамично да промените клаузата IN на командата pivot. Но това е лесно сега намерих решението.

Emphyrio.