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