2012-07-02 4 views
0

Я пытаюсь написать запрос, который сортирует результаты таблицы, которая разбивается на 3 раздела, и я хочу, чтобы каждый раздел был в алфавитном порядке после завершения. Вот запрос, я написал:Результаты поиска по алфавиту после заказа Сортировка

SELECT * FROM 
(SELECT TOP 100 PERCENT * FROM Hospital WHERE Status = 1 Order By HospitalShortName) 
As Result Order BY CASE HospitalType 
WHEN 'HOS' THEN 1 WHEN 'NH' THEN 2 ELSE 3 END 

Так что мой предполагаемый результат будет что-то вроде этого:

  • больницы
  • больницы B
  • больница C
  • NursingHome
  • и т.д.

Однако этот запрос возвращает список, разбитый на правильные группы, но не в алфавитном порядке по HospitalShortName. Я понимаю, почему вышеупомянутый запрос не сработает, но я потерялся относительно того, куда идти отсюда. Любая помощь очень ценится.

+0

_ «Я понимаю, почему вышеуказанный запрос не сработает» _ просто из любопытства, почему? –

+0

Я понимаю, что подзапрос был успешно выполнен в алфавитном порядке, но затем был отброшен, как только он был снова отсортирован по типу HospitalType. – user1211860

ответ

4

В подзапросе нет необходимости. Просто добавьте второй столбец в свое внешнее предложение ORDER BY.

SELECT * 
    FROM Hospital 
    WHERE Status = 1 
    ORDER BY CASE HospitalType 
       WHEN 'HOS' THEN 1 
       WHEN 'NH' THEN 2 
       ELSE 3 
       END, 
       HospitalShortName 
+0

Кроме того, не только нет необходимости, нет гарантии, что порядок в подзапросе будет поддерживаться в любом смысле, когда он передается внешним запросом. – MatBailie

+0

Спасибо, я не знал, что вы можете сделать это после использования аргумента CASE для Order By. Работает отлично. – user1211860

+0

Мой герой. * Точно, что я искал. –

Смежные вопросы