SQL - порядок по полю в случайном порядке - PullRequest
0 голосов
/ 05 марта 2012

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

select * из порядка модели по model.field1, model.field2. Проблема заключается в том, что первую сортировку необходимо выполнить в очень специфическом порядке.

Там, где порядок в поле1 должен быть отфильтрован в КОНКРЕТНОМ порядке.

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

Спасибо.

Ответы [ 3 ]

1 голос
/ 05 марта 2012
order by (case
 when field1 = 'Lexus' then 1
 when field1 = 'Ford' then 2
 when field1 = 'Toyota' then 3
 ...
 else null end)
1 голос
/ 05 марта 2012

Вы можете создать пользовательский 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;
0 голосов
/ 05 марта 2012

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

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

FROM model

Это даст номер строки для каждой отдельной группировки в разделе разбивки на основе порядка поля field1 в этом примере.

EDIT:

Если ваша СУБД не поддерживает оконные функции, вы можете заказать по производителю второе значение - это сгруппирует все строки для каждого производителя вместе:

SELECT manufacturer, field1

FROM model

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