У меня есть таблица с тремя столбцами.Таблица SQL Server 2008 R2 Pivot
Столбец color
может быть динамическим, теперь у меня есть 4 элемента, после того как я получу 6 элементов или больше.
Как написать запрос, чтобы сделать это?
Спасибо
У меня есть таблица с тремя столбцами.Таблица SQL Server 2008 R2 Pivot
Столбец color
может быть динамическим, теперь у меня есть 4 элемента, после того как я получу 6 элементов или больше.
Как написать запрос, чтобы сделать это?
Спасибо
Вы можете использовать динамический SQL, как:
CREATE TABLE #t
(
Company CHAR(3) ,
Value INT ,
color NVARCHAR(10)
)
GO
DECLARE @c NVARCHAR(MAX) = '['
DECLARE @s NVARCHAR(MAX) = ''
INSERT INTO #t
VALUES ('AAA', 2, 'red'),
('AAA', 2, 'white'),
('BBB', 2, 'white'),
('BBB', 3, 'blue'),
('CCC', 3, 'pink'),
('FFF', 4, 'blue')
SELECT @c = @c + color + '],['
FROM (SELECT DISTINCT
color
FROM #t
) AS t
SELECT @c = SUBSTRING(@c, 1, LEN(@c) - 2)
SET @s = ';WITH cte AS
(
SELECT Company, Value, color FROM #t
)
SELECT Company, ' + @c + ' FROM cte
PIVOT(MAX(Value) FOR color IN(' + @c + ')) AS p'
EXEC(@s)
Выход:
Company blue pink red white
AAA NULL NULL 2 2
BBB 3 NULL NULL 2
CCC NULL 3 NULL NULL
FFF 4 NULL NULL NULL
Примените соответствующую агрегацию в сводной оговорке.
Отлично !!! Большое спасибо за Вашу помощь !!! – Alan392
Использование PIVOT
. Подробнее SQL SERVER – PIVOT and UNPIVOT Table Examples
SELECT Company, red, white, blu, pink
FROM TableName
PIVOT(MAX(Value) FOR Color IN(ed, white, blu, pink))AS Piv
Dynamic Pivot:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Color)
FROM TableName c
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT Company, ' + @cols + ' from
(
select Company
, value
, color
from TableName
) x
pivot
(
max(value)
for color in (' + @cols + ')
) p '
execute(@query)
Но колонка «цвета» динамична, теперь красная, игла и т. Д. После blu, черный – Alan392
@ Alan392: Проверьте обновленный результат. –
Если возможно, ручка 'Pivot' в языке программирования. –
Почему FFF равно 2? Какую агрегированную функцию вы хотите применить к столбцу Value? –
Что вы делали до сих пор? –