sql >> データベース >  >> RDS >> Sqlserver

SQLServerに複数の列がある動的ピボットテーブル

    これを使用してください(照合の問題が発生している場合は、3つのINTデータ型すべてを変更してください):

    静的コード:

    SELECT HEADER, [A_1],[B_2],[C_3],[D_4],[E_5],[F_6]        
    FROM    
    (SELECT DECK,HEADER, VALUE FROM REPORT   
        UNPIVOT      
        ( 
        VALUE FOR HEADER IN ([JIB_IN],[REV],[REV_INSIGHT],[JIB_OUT],[CREATION])  
        ) UNPIV
    ) SRC     
    PIVOT    
    (
        SUM(VALUE) 
        FOR DECK IN ([A_1],[B_2],[C_3],[D_4],[E_5],[F_6]) 
    ) PIV
    

    動的SQLの使用:

    DECLARE @COLSUNPIVOT AS NVARCHAR(MAX),
    @QUERY  AS NVARCHAR(MAX),
    @COLSPIVOT AS  NVARCHAR(MAX)
    
    SELECT @COLSUNPIVOT = STUFF((SELECT ','+QUOTENAME(C.NAME)
    FROM SYS.COLUMNS AS C
    WHERE C.OBJECT_ID = OBJECT_ID('REPORT') AND C.NAME <> 'DECK'
    FOR XML PATH('')), 1, 1, '')
    
    SELECT @COLSPIVOT = STUFF((SELECT  ',' + QUOTENAME(DECK)
    FROM REPORT T FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)') ,1,1,'')
    
    SET @QUERY 
    = 'SELECT HEADER, '[email protected]+'
    FROM
    (
    SELECT DECK,HEADER,VALUE FROM REPORT
    UNPIVOT
    (
      VALUE FOR HEADER IN ('[email protected]+')
    ) UNPIV
    ) SRC
    PIVOT
    (
    SUM(VALUE)
    FOR DECK IN ('[email protected]+')
    ) PIV'
    
    EXEC(@QUERY)
    



    1. PostgreSQLWhereカウント条件

    2. mysqlの既存の列名で2つの列を1つに連結する方法は?

    3. ER_NOT_SUPPORTED_AUTH_MODE:クライアントはサーバーから要求された認証プロトコルをサポートしていません。 MySQLクライアントのアップグレードを検討してください

    4. プリペアドステートメントを使用してpostgresqlにタイムゾーン付きのタイムスタンプを挿入するにはどうすればよいですか?