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

Transact/SQL でピボットテーブルを作成する方法は?

    PIVOT を使用する必要があります .変換する列の値がわかっている場合は STATIC PIVOT を使用するか、実行時まで列が不明な場合は DYNAMIC PIVOT を使用できます。

    静的ピボット (デモによる SQL Fiddle を参照してください) ):

    select *
    from 
    (
        select memid, Condition_id, Condition_Result
        from t
    ) x
    pivot
    (
        sum(condition_result)
        for condition_id in ([C1], [C2], [C3], [C4])
    ) p
    

    ダイナミック ピボット (デモによる SQL Fiddle を参照してください) ):

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) 
                FROM t c
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    
    set @query = 'SELECT memid, ' + @cols + ' from 
                (
                    select MemId, Condition_id, condition_result
                    from t
               ) x
                pivot 
                (
                    sum(condition_result)
                    for condition_id in (' + @cols + ')
                ) p '
    
    
    execute(@query)
    

    どちらも同じ結果を生成します。




    1. 一致した配列要素を除外する

    2. PHPMySQLiでecho内にifステートメントを作成する方法

    3. UTF-8とLatin1mysql、utf-8では使用されないインデックス

    4. テーブルに挿入されたデータの重複セット