2012-03-05 2 views
-1

У меня есть SQL-запрос, который мне нужно использовать для заказа поля. Как правило, в hibernate запрос будет выглядеть примерно так:SQL - порядок по полю в случайном цифровом порядке

выбрать * из модели заказать по model.field1, model.field2 Проблема в том, что первая сортировка должна выполняться в очень определенном порядке.

Где заказ в поле1 должен быть отфильтрован в СПЕЦИФИЧЕСКОМ порядке.

Таким образом, вместо того, чтобы указывать автомобили по алфавиту, например. Я бы предпочел сортировать в ответ Lexus, Ford, Toyota, Mazda, Mercedes и т. Д. Есть ли чистый способ сделать это? В настоящее время я получаю результат, а затем должен помещать его в конкретные списки и просто не очень чист. У меня нет возможности изменять вещи в базе данных

Спасибо.

+1

BTW, вы на самом деле не говорите о случайном порядке. Более предписанный порядок. –

ответ

1

Вы можете создать пользовательский ORDER BY, используя оператор CASE.
Сценарий CASE проверяет ваше состояние и присваивает строкам, удовлетворяющим этому условию, меньшее значение, чем значение, присвоенное строкам, которые не соответствуют этому условию.
Это, вероятно, легче всего понять данный пример:

SELECT mycolumn 
    FROM model 
ORDER BY CASE WHEN model.field1 = 'Lexus' THEN 0 
       WHEN model.field1 = 'Ford'  THEN 1 
       WHEN model.field1 = 'Toyota' THEN 2 
       WHEN model.field1 = 'Mazda' THEN 3 
       WHEN model.field1 = 'Mercedes' THEN 4 END, model.field2; 
1
order by (case 
when field1 = 'Lexus' then 1 
when field1 = 'Ford' then 2 
when field1 = 'Toyota' then 3 
... 
else null end) 
0

Вы должны использовать оконные функции и PARTITION BY статьи следующим образом:

SELECT ROW_NUMBER() OVER(PARTITION BY manufacturer ORDER BY field1) [RN], 
     manufacturer, 
     field1, 
     field2 

FROM model 

Это даст номер строки для каждого различная группировка в разделе по разделу, основанному на упорядочении поля1 в этом примере.

EDIT:

Если RDMS не поддерживает оконные функции, вы можете заказать производителем затем второе значение - это будет «группа» все строки для каждого производителя вместе:

SELECT manufacturer, field1 

FROM model 

ORDER BY manufacturer, field1 
+0

Это будет работать в некоторых других РСУБД, но я не верю, что MySQL поддерживает функции окон. – bernie

+0

Если это так, то проигнорируйте мой ответ. Я не работаю с mySQL, но был под впечатлением, что функции окна были в стандартной реализации SQL-сервера стандартного поставщика: http://en.wikipedia.org/wiki/SQL:2003 –

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