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

T-SQLのPIVOT関数を理解する

    PIVOT データを1つの列から複数の列にローテーションするために使用されます。

    例として、ここにSTATIC Pivotがあります。これは、回転させたい列をハードコーディングすることを意味します。

    create table temp
    (
      id int,
      teamid int,
      userid int,
      elementid int,
      phaseid int,
      effort decimal(10, 5)
    )
    
    insert into temp values (1,1,1,3,5,6.74)
    insert into temp values (2,1,1,3,6,8.25)
    insert into temp values (3,1,1,4,1,2.23)
    insert into temp values (4,1,1,4,5,6.8)
    insert into temp values (5,1,1,4,6,1.5)
    
    select elementid
      , [1] as phaseid1
      , [5] as phaseid5
      , [6] as phaseid6
    from
    (
      select elementid, phaseid, effort
      from temp
    ) x
    pivot
    (
      max(effort)
      for phaseid in([1], [5], [6])
    )p
    

    これは、動作するバージョンのSQLデモです。

    これは、列のリストを動的に作成してPIVOTを実行する動的PIVOTを介して実行することもできます。

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX);
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.phaseid) 
                FROM temp c
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT elementid, ' + @cols + ' from 
                (
                    select elementid, phaseid, effort
                    from temp
               ) x
                pivot 
                (
                     max(effort)
                    for phaseid in (' + @cols + ')
                ) p '
    
    
    execute(@query)
    

    両方の結果:

    ELEMENTID   PHASEID1    PHASEID5    PHASEID6
    3           Null        6.74        8.25
    4           2.23        6.8         1.5
    


    1. SQL Serverなしで.mdfデータベースにアクセスすることは可能ですか?

    2. 集計関数なしのGROUPBY

    3. SQL、数値の補助テーブル

    4. Oracleで複数の行を連結してグループ化する