SQL自定義排序


前一陣子有一個需求,要按照用戶的需求安排排序規則:

舉例:

數據庫為Oracle,針對表table_example的class字段排序,class字段值為:A、B、C、D。

用戶要求table_example中的數據按照class字段值C、A、D、B的順序排序。

方法一:

開始想了一個方法是select的時候增加一個自定義字段custom,當class的值為C、A、D、B時令custom的值為1、2、3、4.

利用case when時,發現無需增加自定義字段即可實現:

select * from teble_exaple order by
(
    case class 
        when 'C' then 1,
        when 'A' then 2,
        when 'D' then 3,
        when 'B' then 4
    else '' end
)            

方法二:

利用程序端控制,由於用的PB,實現起來邏輯還是比較復雜,沒有深究,思路:(僅為參考,未實現.)

dw_1.setsort(if(class = 'A', 'C', if(class = 'B', 'D', class)) A)
dw_1.sort

方法三:

利用decode函數:

select * from table_example order by decode(class,'C',1,'A',2,'D',3,'B',4)

sqlserver中類似功能的函數為charindex.

方法三為最簡潔的方案,個人感覺很多情況下能用sql實現的功能比程序端實現要直接。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM