Упорядочить с учетом регистра

У меня комплекс 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 колонка.

Другие вопросы по тегам