Bueno, hay una gran cantidad de referencias para pivot SQL. Pero aún así, no pude resolver mi problema.
Tengo la siguiente tabla:
-----------------------------------------------------------------------
InspectYear PartNo PartDesc A B C D
-----------------------------------------------------------------------
2015 001 Part 1 9 8 8 6
2015 002 Part 2 8 8 8 6
2014 001 Part 1 9 2 8 6
2014 002 Part 2 8 8 8 4
Quiero tener el siguiente resultado con dinámico "InspectYear
":
-----------------------------------------------------------------------
PartNo PartDesc NewCol 2014 2015
-----------------------------------------------------------------------
001 Part 1 A 9 9
001 Part 1 B 2 8
001 Part 1 C 8 8
001 Part 1 D 6 6
002 Part 2 A 8 8
002 Part 2 B 8 8
002 Part 2 C 8 8
002 Part 2 D 4 6
¿Alguien tiene una idea para la consulta de pivote?
muy apreciado.
Respuestas
1 para la respuesta № 1Intente a continuación PIVOT dinámico:
DECLARE @InspectYear AS NVARCHAR(MAX),@Query AS NVARCHAR(MAX);
SET @InspectYear = STUFF((SELECT distinct "," + QUOTENAME(InspectYear)
FROM table4 c
FOR XML PATH(""), TYPE
).value(".", "NVARCHAR(MAX)")
,1,1,"")
SET @Query =
";WITH data AS
(
SELECT InspectYear, PartNo, PartDesc, NewCol, number
FROM table4
UNPIVOT
(
number
FOR NewCol IN (A, B, C,D)
) AS unpvt
)
SELECT *
FROM data
PIVOT
(
SUM(number)
FOR InspectYear IN ( "+@InspectYear+" )
) AS pvt
ORDER BY PartNo, PartDesc, NewCol "
EXECUTE(@query)
Nota: Consulte @doraemon Crear tabla e insertar declaración de datos
0 para la respuesta № 2
Tienes que UNPIVOT
sus datos iniciales y luego otra vez PIVOT
eso.
Aquí está la solución que encontré. Ver si esto cumple con su requisito.
CREATE TABLE table4
(
InspectYear INT,
PartNo VARCHAR(5),
PartDesc VARCHAR(30),
A INT,
B INT,
C INT,
D INT
)
INSERT INTO table4 VALUES
(2015, "001", "Part 1", 9, 8, 8, 6),
(2015, "002", "Part 2", 8, 8, 8, 6),
(2014, "001", "Part 1", 9, 2, 8, 6),
(2014, "002", "Part 2", 8, 8, 8, 4)
;WITH data AS
(
SELECT InspectYear, PartNo, PartDesc, NewCol, number
FROM table4
UNPIVOT
(
number
FOR NewCol IN (A, B, C,D)
) AS unpvt
)
SELECT *
FROM data
PIVOT
(
SUM(number)
FOR InspectYear IN ( [2014], [2015] )
) AS pvt
ORDER BY PartNo, PartDesc, NewCol
Por favor, tenga una oportunidad. Gracias. :)