簡體   English   中英

SQL Server 2008 R2表樞軸

[英]SQL Server 2008 R2 table Pivot

我有一張三列的桌子。

color可以是動態的,現在我有4個元素,可以得到6個或更多元素。

在此處輸入圖片說明

如何編寫查詢來做到這一點?

謝謝

使用PIVOT 學習SQL SERVER – PIVOT和UNPIVOT表示例

SELECT Company, red, white, blu, pink
FROM TableName
PIVOT(MAX(Value) FOR Color IN(ed, white, blu, pink))AS Piv

動態樞軸:

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

在數據透視子句中應用適當的聚合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM