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