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

SQL:実転置

    UNPIVOTではこれを達成できないと思う理由がわかりません およびPIVOT

    select [1], [2], [3], [4], [5]
    from 
    (
      select *
      from
      (
        select col1, col2, col3,
          row_number() over(order by col1) rn
        from yourtable
      ) x
      unpivot
      (
        val for col in (col1, col2, col3)
      ) u
    ) x1
    pivot
    (
      max(val)
      for rn in ([1], [2], [3], [4], [5])
    ) p
    

    SQL Fiddle withDemo を参照してください。 。これは、必要に応じて動的に実行することもできます。

    編集します。列の順序を維持する必要がある場合は、row_number()を適用する次のようなものを使用できます。 order byを使用せずに テーブルの列の1つにあります(の使用に関する記事です。非決定論的な行番号 ):

    select [1], [2], [3], [4], [5]
    from 
    (
      select *
      from
      (
        select col1, col2, col3,
          row_number() 
            over(order by (select 1)) rn
        from yourtable
      ) x
      unpivot
      (
        val for col in (col1, col2, col3)
      ) u
    ) x1
    pivot
    (
      max(val)
      for rn in ([1], [2], [3], [4], [5])
    ) p;
    

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




    1. ORACLEのTimeStamp列から時間部分を抽出します

    2. 2つのテーブルを1つのクラスにHibernateマッピングする

    3. インスタントファイル初期化:セットアップ中の影響

    4. SQLはテーブルの行をカウントします