У меня есть набор результатов, который нужно отсортировать соответственно:
- если значение столбца похоже на 'Qwerty%', поместите его сверху, а затем сортируйте по ПОЗИЦИИ по возрастанию
- если значение столбца не похоже на 'Qwerty%', добавьте его в вышеупомянутый набор результатов 'Qwerty%' и упорядочите их по POSITION по возрастанию
Например, набор результатов, как показано ниже:
NAME | POSITION
---------------------------------
entitlement | 4
threaten | 1
Qwerty Name | 1
Qwerty architecture | 7
drown | 6
expectation | 2
clash | 3
foot | 7
ask | 10
Qwerty structure | 11
Qwerty therapist | 3
Должен быть возвращен в следующем порядке:
NAME | POSITION
---------------------------------
Qwerty Name | 1
Qwerty therapist | 3
Qwerty architecture | 7
Qwerty structure | 11
threaten | 1
expectation | 2
clash | 3
entitlement | 4
drown | 6
foot | 7
ask | 10
До сих пор я придумал это:
SELECT NAME, POSITION FROM TABLE_NAME
ORDER BY CASE NAME
WHEN NAME LIKE 'Qwerty%' THEN CONCAT('A', NAME)
ELSE POSITION END
Но набор результатов возвращается неверно, как показано ниже
NAME | POSITION
---------------------------------
Qwerty Name | 1
Qwerty structure | 11
Qwerty therapist | 3
Qwerty architecture | 7
threaten | 1
drown | 6
expectation | 2
ask | 10
foot | 7
clash | 3
entitlement | 4
Как видите, сортировка по именам, в которых нет 'Qwerty%', не производится, а те, которые не сортируют по POSITION правильно.