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

行ではなく列で結果を並べ替える

    列を並べ替える比較的簡単な方法を次に示します。最初に アンピボット 、並べ替え、ピボット あなたのデータは、ソートされた列を取得します.

    Sql Fiddle の例 .

    -- Assign arbitrary numbers to records
    -- You might skip this part if you have unique column
    -- in which case you should replace RecordNumber with this ID
    ; with numbered as
    (
      select *,
             row_number() over (order by (select null)) RecordNumber
        from test
    ),
    -- Generate order by
    -- For all the columns in record.
    -- Rn will always be in range
    -- 1..NumberOfColumns
    -- Order is done on unpivoted data
    ordered as
    (
      select *,
             row_number() over (partition by RecordNumber
                                order by v desc) rn
        from numbered
     -- list all the columns here
     -- v is for value
     -- c is for column
     unpivot (v for c in (c1, c2, c3)) u
    )
    -- Finally return the data in original layout
    select RecordNumber,
           [1] c1,
           [2] c2,
           [3] c3
      from 
      (
        -- Only the columns needed by the query
        -- Pivot will not play nice even if you
        -- Select only subset of columns in
        -- outer query
        select RecordNumber,
               v,
               Rn
          from ordered
      ) o
     -- Get value for row numbers 1..NumberOfColumns
     pivot (min(v) for Rn in ([1], [2], [3])) p
    

    ヘッダー行を追加して、どの値がどの列から来ているかがわかるようにすることもできます。これを行うには、ヘッダー/行を識別する列を追加し、すべてを o に結合します 対応するヘッダーと順序を取得して、これら 2 つの行が確実に一緒になるようにします:

      (
        select RecordNumber,
               v,
               Rn,
               1 HdrRow
          from ordered
         union all
        select RecordNumber,
               c,    -- Column name is in c
               Rn,
               0 HdrRow
          from ordered
      ) o
        ...
      order by RecordNumber, HdrRow
    


    1. T-SQL条件付き順序

    2. Entity FrameworkがOracleに接続:ODPfor.NETは時間をサポートしていません

    3. MySQLは2つの列からテキストを検索します

    4. CentOS7でpostgresqlサービスを開始できません