實現指定順序排序

2021-06-16 14:50:14 字數 631 閱讀 2648

在工作中經常會遇到如下場景,客戶提出需求,我需要某乙個列表中的資料按照指定的順序排序,而之前並沒有告訴你要排序。場景如下:

有資料表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...