查询没有自动排序

时间:2010-08-25 20:20:17

标签: sql sql-server-2005

  

可能重复:
  Ordering MySQL results by IN sequence?
  Ordering by the order of values in a SQL IN() clause

我有下表“产品”

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

3 个答案:

答案 0 :(得分: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非特定的,但需要注意的是,如果您按特定顺序拥有更多值,那么编写屁股会很麻烦)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

如果排序顺序不是动态的,而是产品固有的,那么您可能需要在表中使用另一个可以在ORDER BY子句中使用的SortOrder字段:

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

SortOrder的位置如下:

Id  SortOrder
1   20 
2   40
3   10
4   30