SQL Server 2008 R2表透视
我有一个有三列的表 列SQL Server 2008 R2表透视,sql,sql-server-2008-r2,Sql,Sql Server 2008 R2,我有一个有三列的表 列color可以是动态的,现在我有4个元素,之后我可以得到6个或更多元素 如何编写查询来实现这一点 感谢您使用PIVOT。学习 动态轴心: DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX); SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.Color) FROM TableName c FOR
color
可以是动态的,现在我有4个元素,之后我可以得到6个或更多元素
如何编写查询来实现这一点
感谢您使用
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)
您可以使用动态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
在pivot子句中应用适当的聚合。如果可能,用编程语言处理pivot
。为什么FFF是2?您希望将哪个聚合函数应用于值列?到目前为止您都做了些什么?但是“colors”列是动态的,现在是红色的,等等。。。蓝色之后是黑色
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