Oracle SQL сортировка по троичной операции - PullRequest
1 голос
/ 06 февраля 2020

Я пытаюсь отсортировать записи в ORACLE SQL так, чтобы все строки, содержащие фразу «VENT», были отсортированы сверху, а остальные - по длине.

   Select D1.MENU_TEXT
   from IMPRESSIONS_DEF D1
   order by IFF(instr(D1.MENU_TEXT, 'VENT'),1, LENGTH(D1.MENU_TEXT));

Я пробовал это, но это не удается с недействительным идентификатором "IFF". Я также попробовал

   Select D1.MENU_TEXT, iff(D1.MENU_TEXT like '%VENT%', 1, 200) as k
   from IMPRESSIONS_DEF D1
   order by k + Length(D1.Menu_Text);

и там написано "отсутствует правильная скобка"

1 Ответ

4 голосов
/ 06 февраля 2020

Используйте выражение case:

ORDER BY (CASE WHEN MENU_TEXT LIKE '%VENT%' THEN 1 ELSE 2 END),
         LENGTH(D1.MENU_TEXT);

CASE является стандартным SQL. IIF() на заказ SQL используется только несколькими базами данных.

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