Пользовательская сортировка в SQL order by clause?

Вот ситуация, которую я пытаюсь решить:

У меня есть запрос, который может вернуть набор записей. Поле, по которому производится сортировка, может иметь несколько различных значений - в рамках данного вопроса мы скажем, что значение может быть A, B, C, D, E или Z

Теперь, в зависимости от результатов запроса, сортировка должна вести себя следующим образом: Если найдены только записи A-E, то их сортировка "естественным образом" - это нормально. Но если в результатах есть запись Z, то она должна быть первым результатом запроса, а остальные записи должны быть отсортированы в "естественном" порядке.

Например, если найдены A C D, то результат должен быть

A
C
D

Но если найдены A B D E Z, то результат должен быть отсортирован:

Z
A
B
D
E

Сейчас запрос выглядит так:

SELECT NAME, SOME_OTHER_FIELDS FROM TABLE ORDER BY NAME

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

Так что для всех вас, гуру SQL, вы можете предоставить мне запрос, который сделает то, что я хочу?

8
задан Zeke Hansell 22 October 2011 в 21:00
поделиться