2010-08-25 2 views
3

Возможные Дубликаты:
Ordering MySQL results by IN sequence?
Ordering by the order of values in a SQL IN() clauseзапроса без AutoSort

я следующая таблица под названием "Продукты"

id desc 
1 BL10 
2 BL15 
3 BL45 
4 BL50 

ну, это мой запрос SELECT * FROM Products WHERE id IN(3,1,4,2) Я хочу это показывает в том же порядке пункта IN, т.е. 3,1,4,2:

id desc 
3 BL45 
1 BL10 
4 BL50 
2 BL15 

но когда я выполнить его, он показывает упорядоченный, Как я могу получить это? Я использую MSSQL 2005

+1

зависит ли это MySQL связанных –

+1

Что RDBMS вы используете? –

+0

MySQL, SQL Server, Oracle? –

ответ

1
SELECT * FROM Products WHERE id IN (3, 1, 4, 2) 
ORDER BY FIELD (id, 3, 1, 4, 2) 
4

Ваш пункт IN не будет сортировать результирующий набор, но вместо того, чтобы ваши результаты будут возвращены в порядке, они встречаются в запросе.

Если вы хотите, вы можете создать явную ORDER BY для сортировки в порядке, вы хотите:

SELECT * 
FROM Products 
WHERE id IN (3,1,4,2) 
ORDER BY (CASE WHEN id = 3 THEN 0 
       WHEN id = 1 THEN 1 
       WHEN id = 4 THEN 2 
       WHEN id = 2 THEN 3 END) 

(Это DBMS-неспецифические, с той оговоркой, что бы боль в заднице для записи, если у вас есть больше значений, которые вы хотите в определенном порядке)

+0

Я использую mssql 2005 – GuzZpaWn

+2

Ну только боль, если она не выполнена динамически ;-) –

+0

+1 для версии ANSI-SQL ... –

0

Если заказ сортировки не является динамическим, но является неотъемлемой частью продукта, возможно, вам понадобится другое поле в таблице для SortOrder, которое вы можете использовать в ORDER BY:

SELECT * FROM Products WHERE ID IN (3,1,4,2) ORDER BY SortOrder

Где SortOrder выглядит следующим образом:

Id SortOrder 
1 20 
2 40 
3 10 
4 30 
Смежные вопросы