SQL按照指定順序對字段進行排序


SqlServer按照指定順序對字段進行排序

問題如下,在SqlServer有一個這樣的SQL查詢

SELECT *
FROM Product
WHERE ID IN ( 12490, 12494, 12486 )

在一個名為Product的表中對自增字段ID做in查詢,他希望查出來的記錄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=123和ID=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。

\


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM