如何在SQL查詢中設置條件邏輯以混洗優先級?如何在SQL查詢中設置條件邏輯以混洗優先級?
例如,如果我有像「id」,「名稱」,「event_id」列的表,並且我有不同的「event_id」像180,181,270,271,並且我需要以這樣的方式排序:行其中「event_id」270將在頂部,然後是具有「even_id」271的行,並且其餘數據將按照「id」列以降序排列。
如何在SQL查詢中設置條件邏輯以混洗優先級?如何在SQL查詢中設置條件邏輯以混洗優先級?
例如,如果我有像「id」,「名稱」,「event_id」列的表,並且我有不同的「event_id」像180,181,270,271,並且我需要以這樣的方式排序:行其中「event_id」270將在頂部,然後是具有「even_id」271的行,並且其餘數據將按照「id」列以降序排列。
我喜歡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;
使用CASE語句來完成訂單,您想
ORDER BY
CASE
WHEN event_id = 270 THEN 0
WHEN event_id = 271 THEN 1
ELSE 2
END,
id DESC
這裏的一個簡單的方法,如果你只有一個案例:
ORDER BY event_id <> 270 ASC, event_id ASC
表達式event_id <> 270
的計算結果爲0爲假或1爲真。
Oracle不支持在ORDER布爾表達式BY子句。 – 2010-04-08 00:49:59
這是同樣的評論我是在寫:) – 2010-03-10 03:08:33
@Jackson米勒的過程: 我會感到驚訝,如果有一個這樣的完美的解決方案;-) – zerkms 2010-03-10 03:09:43