Как установить условную логику в запросе SQL, чтобы перемешать приоритет? - PullRequest
4 голосов
/ 10 марта 2010

Как установить условную логику в запросе SQL, чтобы перемешать приоритет?

Например, если у меня есть таблица со столбцами, такими как «id», «name», «event_id», и у меня есть различные «event_id», такие как 180, 181, 270, 271, и мне нужно упорядочить таким образом, чтобы строки с «event_id» 270 будет вверху, затем строки с «even_id» 271, а остальные данные будут упорядочены по столбцу «id» в порядке убывания.

Ответы [ 3 ]

13 голосов
/ 10 марта 2010

используйте оператор CASE, чтобы сделать заказ, который вы хотите

ORDER BY
CASE
    WHEN event_id = 270 THEN 0
    WHEN event_id = 271 THEN 1
    ELSE 2
END,
id DESC
8 голосов
/ 10 марта 2010

Я предпочитаю CASE:

ORDER BY CASE event_id WHEN 270 THEN 0
                       WHEN 271 THEN 1
         END NULLS LAST,
         id DESC;

но иногда я использую DECODE, который немного менее многословен:

ORDER BY DECODE(event_id, 270, 0,
                          271, 1,
                          2),
         id DESC;
0 голосов
/ 07 апреля 2010

Вот простой способ, если у вас есть только один случай:

ORDER BY event_id <> 270 ASC, event_id ASC

Выражение event_id <> 270 оценивается как 0 для false или 1 для true.

...