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

SQL転置フルテーブル

    データを目的の結果に転置するには、両方のUNPIVOTを使用する必要があります。 およびPIVOT 関数。

    UNPIVOT 関数はAを取ります およびB 列を作成し、結果を行に変換します。次に、PIVOTを使用します dayを変換する関数 列への値:

    select *
    from
    (
      select day, col, value
      from yourtable
      unpivot
      (
        value
        for col in (A, B)
      ) unpiv
    ) src
    pivot
    (
      max(value)
      for day in (Mon, Tue, Wed, Thu, Fri)
    ) piv
    

    SQL FiddlewithDemoを参照してください。

    SQL Server 2008以降を使用している場合は、CROSS APPLYを使用できます。 VALUESを使用 データのピボットを解除します。コードは次のように変更されます:

    select *
    from
    (
      select day, col, value
      from yourtable
      cross apply
      (
        values ('A', A),('B', B)
      ) c (col, value)
    ) src
    pivot
    (
      max(value)
      for day in (Mon, Tue, Wed, Thu, Fri)
    ) piv
    

    SQL FiddlewithDemoを参照してください。

    #1を編集し、現在のクエリを上記のソリューションに適用すると、次のようなものが使用されます。

    select *
    from
    (
      select LEFT(datename(dw,datetime),3) as DateWeek,
        col, 
        value
      from DataTable 
      cross apply 
      (
        values ('A', ACalls), ('B', BCalls)
      ) c (col, value)
    ) src
    pivot
    (
      sum(value)
      for dateweek in (Mon, Tue, Wed, Thu, Fri)
    ) piv
    



    1. オラクルのサブクエリとは

    2. 主キーを変更する

    3. LocalTime()がPostgreSQLでどのように機能するか

    4. 各グループの最後のレコードを取得する-MySQL