Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

sắp xếp kết quả theo cột không phải hàng

Đây là cách tương đối đơn giản để sắp xếp các cột. Nếu lần đầu tiên bạn hủy chia sẻ , sắp xếp và tổng hợp dữ liệu của bạn, bạn sẽ nhận được các cột được sắp xếp.

Đây là ví dụ về 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

Bạn có thể muốn thêm các hàng tiêu đề để biết giá trị nào đến từ cột nào. Để làm điều này, tôi sẽ thêm một tiêu đề / hàng xác định cột, kết hợp tất cả thành o để có được các tiêu đề tương ứng và sắp xếp theo thứ tự sẽ đảm bảo rằng hai hàng này ở cùng nhau:

  (
    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. PARSE () so với CAST () so với CONVERT () trong SQL Server:Sự khác biệt là gì?

  2. Nhóm số đóng

  3. Tùy chọn tổng hợp trong câu lệnh SQL Server CASE

  4. Cách sử dụng FILEGROUPPROPERTY () trong SQL Server

  5. Dấu phẩy Được phân tách danh sách các hàng của một cột với nhóm theo các cột khác