2016-03-02 74 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) 
相关问题