Аз съм се борят с 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.