简体   繁体   English

SQL Server 2008 R2表枢轴

[英]SQL Server 2008 R2 table Pivot

I have a table with 3 columns. 我有一张三列的桌子。

The column color can be dynamic, now I have 4 elements, after I can get 6 elements or more. color可以是动态的,现在我有4个元素,可以得到6个或更多元素。

在此处输入图片说明

How to write query to do this ? 如何编写查询来做到这一点?

Thank you 谢谢

Using PIVOT . 使用PIVOT Learn SQL SERVER – PIVOT and UNPIVOT Table Examples 学习SQL SERVER – PIVOT和UNPIVOT表示例

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)

You can use dynamic sql like: 您可以像这样使用动态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)

Output: 输出:

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

Apply appropriate aggregation in pivot clause. 在数据透视子句中应用适当的聚合。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM