/ / Intentar transponer y crear pivote en T-SQL - servidor SQL, pivote, transposición, unpivot

Intentando transponer y crear un pivote en T-SQL - sql-server, pivot, transpose, unpivot

Estoy luchando con los comandos no-pivote y pivote, pero no puedo hacerlo bien. Quiero transponer usando Transact SQL de la tabla 1 a la tabla 2:

Haga clic aquí para ver mis tablas de origen y destino

¿Cómo puedo lograr esto? Hasta aquí llegué a esto:

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

Pero el comando de pivote no puedo hacerlo bien. Alguien puede ayudarme?

BR, emphyrio

Respuestas

0 para la respuesta № 1

Resolví el rompecabezas yo mismo, usando este 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

Ahora lo único que queda es cambiar dinámicamente la cláusula IN del comando pivote. Pero eso es fácil ahora que he encontrado la solución.

Emphyrio.