在工作中經常會遇到如下場景,客戶提出需求,我需要某乙個列表中的資料按照指定的順序排序,而之前並沒有告訴你要排序。場景如下:
有資料表recorddata,包括三個字段,id/description/catalog,現客戶指定要以descripton排序,排序規則按照d1/d2/d3排序顯示。
一種比較直接的方法是:首先讀取所有的t1記錄,儲存在arraylist中,然後通過指定的順序去遍歷d1/d2/d3,先將包含d1的挑選出儲存在另乙個arraylist中,迴圈所有的記錄即可。
但是這樣做有乙個問題,如果記錄非常多,排序規則也有很多,那麼就要迴圈多次,效率會很低下。另一種辦法如下:
新建資料表sortrule,
iddescription1d1
2d23d3
則可以直接構造sql語句實現需求
select t1.id,t1.description,t1.catalog
from recorddata t1
left join sortrule t2 on t1.description=t2.description
order by t2.id asc
很簡單的實現了需求,而且比直接演算法更好的在於可動態定義排序規則。
SqlServer按指定順序進行排序
sql一 select from tabname where1 1order by charindex rtrim cast 列名 as nchar 北京,上海,廣州 sql二 select from tabname where id in 1 2,3 4,5 order by charindex ...
oracle按照指定順序進行排序
之前在網上查了下按照指定順序進行排序的方法,根據charindex來處理排序,但是在oracle發現不行,因為oracle沒有charindex函式,然後使用instr代替了charindex,然後又在網上搜了另外一種方 實驗如下 1.新建表 create table br dict id numb...
sql排序,對欄位指定值排序順序
我們知道在sql sever中排序主要兩種,順序,降序。問題簡述如下 字段值 1 4 8 6,公升序是1 4 6 8,降序是 8 6 4 1,怎麼讓他排成4 8 6 1。語句1 selectid from table where id in 1,4,8,6 order by charindex co...