Упорядочить с учетом регистра
У меня комплекс order by
с case
выражение.
ORDER BY CASE WHEN field_1 = ? then 0
WHEN field_2 = ? then 1 ELSE 3 end ASC
я хочу заказать внутренние результаты по field_3
например мой стол -
index | field_1 | field_2 | field_3
0 | car | red | 2
1 | hat | red | 5
2 | red | house | 4
а также ? = red
Таким образом, индексы 0 и 1 получат 1, а индекс 2 получит 0 из выражения case.
и я хочу заказать снова field_3
но порядок должен быть только между одинаковыми значениями.
поэтому индекс 0,1 должен order by field_3
Есть предложения как этого добиться?
Результат должен быть -
индекс 2 -> индекс 0 -> индекс 1
2 ответа
Не уверен, что понимаю, но почему бы просто не сделать
ORDER BY CASE WHEN field_1 = ? then 0
WHEN field_2 = ? then 1 ELSE 3 end ASC, field_3 ASC
Если первая часть (CASE) равна для двух или более строк, то эти строки будут отсортированы по field_3
Вы должны включить field_3
также внутри оператора case в другой части:
ORDER BY
CASE
WHEN field_1 = 'red' then -2
WHEN field_2 = 'red' then -1
ELSE field_3
END, field_3
Я использовал отрицательные значения на всякий случай 0
или же 1
возможные значения в field_3
колонка.