2016-03-02 62 views
0

我有很多關鍵字 - 「b1,b2,b3,a1,z1」,這些關鍵字稍後將組成查詢條件,以便從數據庫執行查詢。如何按條件對結果進行排序?

是這樣的:

SELECT * 
    FROM sometable 
WHERE id IN (b1,b2,b3,a1,z1) 

但搜索結果都是爲了一個爛攤子。

ID 
------------ 
    a1 
    b2 
    b3 
    b1 
    z1 

的問題是如何讓搜索結果中完全呈現爲B1,B2,B3,A1,Z1

+0

你看過訂單的謂詞嗎? –

+1

你如何收到這些關鍵字?如果這是一個存儲過程,則可以創建一個帶有身份PK的局部變量表,然後針對它進行連接並按該字段排序。 – Andrew

+0

你使用任何CSV分割器將關鍵字分割成列表? – Squirrel

回答

1

一種方法是使用charindex()

ORDER BY CHARINDEX(',' + CAST(id AS VARCHAR(255)) + ',', ',b1,b2,b3,a1,z1,') 

另一種方法是要使用join

SELECT s.* 
FROM sometable s JOIN 
    (VALUES ('b1', 1), ('b2', 2), ('b3', 3), ('a1', 4), ('z1', 5) 
    ) v(id, priority) 
    ON s.id = v.id 
ORDER BY v.priority; 
0

如果ID始終是一個字符加單數您可以使用這個數字號碼。如果可以包含多於一個字符或多於一個數字的數字,則需要調整數字。

SELECT * 
FROM sometable 
ORDER BY SUBSTRING(ID, 1, 1) 
, SUBSTRING(ID, 2, 1) 
相關問題