упорядочить с учетом регистра - PullRequest
0 голосов
/ 08 января 2019

У меня есть комплекс 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 ]

0 голосов
/ 08 января 2019

Вы должны включить 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.

0 голосов
/ 08 января 2019

Не уверен, что понимаю, но почему бы просто не сделать

ORDER BY CASE WHEN field_1 = ? then 0 
              WHEN field_2 = ? then 1 ELSE 3 end ASC, field_3 ASC

Если первая часть (CASE) равна двум или более строкам, то эти строки будут отсортированы по field_3

...