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

SQL Server - PIVOT - 2 つの列を行に

    必要な結果を得るには、いくつかの方法があります。 @Sheela KR's に似ています CASE 式で集計関数を使用できますが、より簡潔な方法で記述できます:

    select 
      max(case when rowid = 1 then first end) First1,
      max(case when rowid = 1 then last end) Last1,
      max(case when rowid = 2 then first end) First2,
      max(case when rowid = 2 then last end) Last2,
      max(case when rowid = 3 then first end) First3,
      max(case when rowid = 3 then last end) Last3,
      max(case when rowid = 4 then first end) First4,
      max(case when rowid = 4 then last end) Last4,
      max(case when rowid = 5 then first end) First5,
      max(case when rowid = 5 then last end) Last5
    from yourtable;
     

    SQL Fiddle with Demo を参照してください。 .

    これは PIVOT 関数を使用して記述することもできますが、複数の列をピボットしたい場合は、最初に First のアンピボットを確認する必要があります。 そして Last 列。

    アンピボット プロセスにより、複数の列が複数のデータ行に変換されます。使用している SQL Server のバージョンを指定していませんが、SELECT を使用できます UNION ALLCROSS APPLY で または UNPIVOT 最初の変換を実行する関数:

    select col = col + cast(rowid as varchar(10)), value
    from yourtable
    cross apply 
    (
      select 'First', First union all
      select 'Last', Last
    ) c (col, value)
     

    SQL Fiddle with Demo を参照してください。 .これにより、データが次の形式に変換されます:

    <プレ>| COL | VALUE | |--------|-------------| | First1 | RandomName1 | | Last1 | RandomLast1 | | First2 | RandomName2 | | Last2 | RandomLast2 |

    データが複数の行になったら、PIVOT 関数を簡単に適用できます。

    select First1, Last1, 
      First2, Last2,
      First3, Last3, 
      First4, Last4, 
      First5, Last5
    from
    (
      select col = col + cast(rowid as varchar(10)), value
      from yourtable
      cross apply 
      (
        select 'First', First union all
        select 'Last', Last
      ) c (col, value)
    ) d
    pivot
    (
      max(value)
      for col in (First1, Last1, First2, Last2,
                  First3, Last3, First4, Last4, First5, Last5)
    ) piv;
     

    SQL Fiddle with Demo を参照してください。

    どちらも次の結果を返します:

    <プレ>| FIRST1 | LAST1 | FIRST2 | LAST2 | FIRST3 | LAST3 | FIRST4 | LAST4 | FIRST5 | LAST5 | |-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------|-------------| | RandomName1 | RandomLast1 | RandomName2 | RandomLast2 | RandomName3 | RandomLast3 | RandomName4 | RandomLast4 | RandomName5 | RandomLast5 |

    1. 特定の月のカテゴリによって変更/更新されたステータスをカウントするにはどうすればよいですか?

    2. Windows用の良いpostgresqlクライアント?

    3. SQL Server(T-SQL)で10進数を16進数に変換する3つの方法

    4. homebrewを使用してMACにPostgresqlでPHPをインストールする