2016-03-02 2 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

Если идентификатор всегда является символом плюс сингл вы можете использовать это число. Вам нужно настроить номера, если они могут содержать более 1 символа или более 1 цифры.

SELECT * 
FROM sometable 
ORDER BY SUBSTRING(ID, 1, 1) 
, SUBSTRING(ID, 2, 1) 
Смежные вопросы