Как отсортировать таблицу с некоторыми полями в соответствии с моими условиями - PullRequest
2 голосов
/ 12 мая 2010

Я хочу отсортировать таблицу на сервере SQL. Условие, которое мне нужно выполнить, это У меня есть таблица, в которой есть несколько записей, как это

Select One
None
Child
Old
Neutral
..
..
..

Я хочу, чтобы он сортировался таким образом, чтобы в нем отображался «Выбрать один», а в конце «Нет», а остальные сортируются по алфавиту.

Select One
Child
Neutral
Old
..
..
..
None

Возможно ли как-нибудь сделать это любым эффективным способом. У меня есть несколько других полей, также связанных с этим. От имени них я хочу получить эти ценности. Эти поля заполняются в выпадающих списках

Я должен сделать это для 12 столов.

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Попробуйте использовать CASE в ORDER BY следующим образом:

SELECT...

    ORDER BY CASE
                 WHEN YourColumn='Select One' then 1
                 WHEN YourColumn='none' then 3
                 ELSE 2
              END,YourColumn

рабочий пример:

DECLARE @YourTable table (YourColumn varchar(20))
INSERT @YourTable VALUES ('Select One')
INSERT @YourTable VALUES ('None')
INSERT @YourTable VALUES ('Child')
INSERT @YourTable VALUES ('Old')
INSERT @YourTable VALUES ('Neutral')

SELECT * FROM @YourTable
ORDER BY CASE
             WHEN YourColumn='Select One' then 1
             WHEN YourColumn='none' then 3
             ELSE 2
          END,YourColumn

ВЫВОД:

YourColumn
--------------------
Select One
Child
Neutral
Old
None

(5 row(s) affected)
1 голос
/ 12 мая 2010

Вы можете добавить поле последовательности в таблицу - tinyint, который вы можете использовать в заказе по предложению:

select field_name
  from table_name
  order by [sequence]

Или вы можете использовать оператор case для создания поля сортировки:

select field_name, 
  case field_name
    when 'Select One' then 1
    when 'Child' then 2
    when 'Neutral' then 3
    when...
  end as sort_field
 from table_name
 order by sort_field
0 голосов
/ 12 мая 2010

Поскольку эти значения будут использоваться для некоторого выбора, обычно такие значения хранятся в собственных таблицах.

Из вашего вопроса я понимаю, что вы уже делаете это.

Просто добавьте еще одно поле, которое определит порядок сортировки, затем вы можете выбрать и упорядочить по этому полю.

Есть способы сделать это без дополнительного столбца (предположим, что имена полей value)

ORDER BY CASE value 
            WHEN 'None' THEN 'ZZZZZ' 
            WHEN 'Select One' THEN 'AAAAA' 
            ELSE values 
         END

(замените 'AAAAA' и 'ZZZZZ' соответствующими константами для вашего домена), но я сомневаюсь, что этот подход будет лучше с точки зрения производительности или простоты внедрения / обслуживания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...