Е, има много референции за 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
Моля, опитайте. Благодаря ти. :)