1

我有一个复杂order bycase表情。

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

我想按 a 排序内部结果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 会从 case 表达式中得到 0。

我想再次订购,field_3但顺序应该只在相同的值之间。

所以索引 0,1 应该order by field_3

任何建议如何实现这一目标?


结果应该是——

索引 2 -> 索引 0 -> 索引 1

4

2 回答 2

3

不确定我是否理解,但为什么不这样做

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

如果两行或多行的第一部分(CASE)相等,那么这些行将按field_3

于 2019-01-08T14:02:04.067 回答
1

您还需要field_3在 else 部分的 case 语句中包含:

ORDER BY 
  CASE 
    WHEN field_1 = 'red' then -2 
    WHEN field_2 = 'red' then -1 
    ELSE field_3 
  END, field_3

我使用负值以防万一0,或者1field_3列中的可能值。

于 2019-01-08T14:18:27.220 回答