2010-03-10 72 views
4

如何在SQL查詢中設置條件邏輯以混洗優先級?如何在SQL查詢中設置條件邏輯以混洗優先級?

例如,如果我有像「id」,「名稱」,「event_id」列的表,並且我有不同的「event_id」像180,181,270,271,並且我需要以這樣的方式排序:行其中「event_id」270將在頂部,然後是具有「even_id」271的行,並且其餘數據將按照「id」列以降序排列。

回答

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; 
13

使用CASE語句來完成訂單,您想

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

這是同樣的評論我是在寫:) – 2010-03-10 03:08:33

+0

@Jackson米勒的過程: 我會感到驚訝,如果有一個這樣的完美的解決方案;-) – zerkms 2010-03-10 03:09:43

0

這裏的一個簡單的方法,如果你只有一個案例:

ORDER BY event_id <> 270 ASC, event_id ASC 

表達式event_id <> 270的計算結果爲0爲假或1爲真。

+0

Oracle不支持在ORDER布爾表達式BY子句。 – 2010-04-08 00:49:59