如何在SQL查询中设置条件逻辑以改变优先级?

时间:2010-03-10 03:00:11

标签: sql oracle sql-order-by

如何在SQL查询中设置条件逻辑以便改组优先级?

例如,如果我有像“id”,“name”,“event_id”这样的列的表,并且我有不同的“event_id”,如180,181,270,271,我需要以这样的方式排序“event_id”270将位于顶部,然后是“even_id”271的行,其余数据将按“id”列按降序排序。

3 个答案:

答案 0 :(得分:13)

使用CASE语句执行您想要的订单

ORDER BY
CASE
    WHEN event_id = 270 THEN 0
    WHEN event_id = 271 THEN 1
    ELSE 2
END,
id DESC

答案 1 :(得分:8)

我更喜欢CASE:

ORDER BY CASE event_id WHEN 270 THEN 0
                       WHEN 271 THEN 1
         END NULLS LAST,
         id DESC;

但有时我会使用DECODE,这有点不那么罗嗦:

ORDER BY DECODE(event_id, 270, 0,
                          271, 1,
                          2),
         id DESC;

答案 2 :(得分:0)

如果你只有一个案例,这是一个简单的方法:

ORDER BY event_id <> 270 ASC, event_id ASC

表达式event_id <> 270的计算结果为0表示false,1表示true表示。