SqlServer按指定順序進行排序

2021-10-10 04:43:39 字數 2373 閱讀 8219

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(

','+

convert

(varchar

,id)

+','

,'2,4,5,1,3'

)

sql三:

select

*from tabname where id in(1

,2,3

,4,5

)order

by charindex(rtrim(cast(id as

nchar))

,'2,4,5,1,3'

)

select id,invno from t_swipe

where invno in

('bb10'

,'sc10'

,'sc11'

,'bb11'

)order

by charindex(

','+

convert

(varchar

,invno)

+','

,'bb10,sc10,sc11,bb11,'

)

這裡面有幾點需要注意的

1:order by後面的 各個invno裡是沒有單引號,in裡面有

2:order by 後面bb11的逗號不能省略,(一開始沒寫的時候,本來應該在最後乙個的跳到第二個去了)

昨天在q群上面有個朋友提出個sql查詢的問題尋求解決方法,結果小查了一下資料然後幫他解決了問題,算是學了點小技巧,這裡記錄一下^^。

問題如下,在sqlserver有乙個這樣的sql查詢,select * from product where id in (12490,12494,12486)。在乙個名為project的表中對自增欄位idin查詢,他希望查出來的記錄id欄位按照'12490','12494','12486'這個順序來排,但是很不幸的是查出來後的記錄是按照id的進行正排序,這並不符合他的要求。

查出的結果如下:

由於對sql實在是不熟悉,於是我查了點資料,發現可以用sqlserver的charindex方法來完成這一實現,最終給出如下的答案,

select

*from product where id in

(12490

,12494

,12486

)order

by charindex(

','+

convert

(varchar(10

),id)

+','

,',12490,12494,12486,'

)

查詢的結果如下:

說明:這裡用到乙個小技巧,就是把id轉成字串,然後在兩邊加上",",組合乙個字串,用逗號隔開每個id,然後查詢id的下標值(之所以兩邊加上","是因為查詢下標的時候類似id=123id=1234會查到同乙個下標,網上給出的類似答案幾乎都沒有注意到這一點!!!)。如果對charindex這個方法不看不明的話可以看下以下這個查詢,估計就明白了。

select product.

*, charindex(

','+

convert

(varchar(10

),id)

+','

,',12490,12494,12486,'

)as idindex

from product

where id in

(12490

,12494

,12486

)order

by idindex

查詢結果如下(請看第二個表,第乙個表用來做對比),這裡也可以發現乙個細節,就是index是從1開始的,而不是0

hive 按指定順序排序 按指定規則給資料排序。

在excel中,不可能將生活中所有規則都寫入到excel的內建資料裡。生活中,往往要根據實際情況指定規則來排列順序。下例裡,要求按 校長 副書記 副校長 政教主任 德育主任 教務主任 班主任進行排序。怎麼辦?首先 單擊職業列的第1個職務資料b2,右鍵選擇排序 自定義排序。其次 在上述開啟的排序對話方...

如何按指定的順序獲取資料

測試table createtabletable1 idint,namechar insertintotable1 select1,q unionallselect2,r unionallselect3,3 unionallselect4,5 要求按指定的id順序 比如2,1,4,3 排列獲取tab...

如何按指定的順序獲取資料

測試table create table table1 id int,name char insert into table1 select 1,q union all select 2,r union all select 3,3 union all select 4,5 要求按指定的id順序 比...