Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

urutkan hasil berdasarkan kolom bukan baris

Berikut adalah cara yang relatif sederhana untuk mengurutkan kolom. Jika Anda pertama kali unpivot , urutkan dan pivot data Anda, Anda akan mendapatkan kolom yang diurutkan.

Ini Sql Fiddle beserta contohnya .

-- 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

Anda mungkin ingin menambahkan baris tajuk sehingga Anda tahu nilai mana yang berasal dari kolom mana. Untuk melakukan ini, saya akan menambahkan kolom yang mengidentifikasi header/baris, menggabungkan semua ke o untuk mendapatkan tajuk dan urutan yang sesuai yang akan memastikan bahwa kedua baris ini tetap bersama:

  (
    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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praktik terbaik untuk serialisasi DateTime di .NET 3.5

  2. Mempermudah kinerja SQL Server

  3. Cara Mengembalikan Semua Batasan CHECK yang Dinonaktifkan di SQL Server (Contoh T-SQL)

  4. Apa gunanya Katalog Awal dalam string koneksi SQL Server?

  5. Cara Mengimpor File JSON ke Tabel SQL Server