/ / Pivot SQL за роком - sql, sql-server, sql-server-2008-r2

Pivot SQL by Year - sql, sql-server, sql-server-2008-r2

Ну, є багато посилань на pivot SQL. Але все ж, я не міг вирішити свою проблему.

У мене є така таблиця:

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

Я хочу мати наступний результат з динамічним "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

Хто-небудь має уявлення про зворотний запит?
дійсно оцінили.

Відповіді:

1 для відповіді № 1

Спробуйте нижче динамічний PIVOT:

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)

Примітка: Зверніться до @doraemon Створіть таблицю та вставте дані


0 для відповіді № 2

Ти мусиш UNPIVOT початкових даних, а потім знову PIVOT це

Ось рішення, яке я знайшов. Дізнайтеся, чи відповідає це вашим вимогам.

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

Будь ласка, спробуйте. Дякую. :)