Sqlserver
 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 за да получите съответните заглавки и ред, чрез които тези два реда ще останат заедно:

  (
    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. Намиране и премахване на повтарящи се поднизове

  2. Синтаксис за стойността по подразбиране за дефиниран от потребителя тип като таблица

  3. 3 начина да получите името на деня от дата в SQL Server (T-SQL)

  4. Създайте правило за ограничаване на специални знаци в таблицата в sql сървъра

  5. mssql конвертира varchar в float