SQL自定義排序

lygle發表於2013-05-21

前一陣子有一個需求,要按照使用者的需求安排排序規則:
 
舉例:
 
資料庫為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實現的功能比程式端實現要直接。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28673746/viewspace-761582/,如需轉載,請註明出處,否則將追究法律責任。

相關文章