6

我们正在查询数据库以按以下方式检索数据

从表 1 中选择 a,b,...f,其中 id 在 (6,33,1,78,2)

我从查询中得到的结果按照 1、2、6、33、78 的顺序排列。

我希望结果以相同的顺序(6,33,1,78,2)。有没有办法以相同的顺序检索数据。

编辑 *我正在使用 SQL 2008 *

4

5 回答 5

9

添加此 order by 子句

order by case 
         when id = 6 then 1 
         when id = 33 then 2  
         when id = 1 then 3  
         when id = 78 then 4  
         when id = 2 then 5  
      end

如果使用 MySQL,你可以这样做

ORDER BY FIND_IN_SET(id, '6,33,1,78,2')
于 2012-04-20T11:35:35.983 回答
3

使用表值构造函数

SELECT a, b, ... f 
FROM 
        table1 
    JOIN
        ( VALUES 
            (1,  6), 
            (2, 33), 
            (3,  1), 
            (4, 78), 
            (5,  2) 
        ) AS ordering (position, id)
      ON  ordering.id = table1.id
ORDER BY position 
于 2012-04-20T11:54:55.430 回答
2

我不知道背景,但通常我在一个额外的 orderIndex 列中实现这个自定义订单。这样我可以在插入表时手动管理顺序并将此列添加到默认查询的 ORDER BY 子句中

于 2012-04-20T11:39:36.573 回答
2

如果您使用 SQL Server,您可以使用charindex.

select A, B
from Table1
where ID in (6,33,1,78,2)
order by charindex(','+cast(ID as varchar(10))+',', ',6,33,1,78,2,')
于 2012-04-20T11:44:04.100 回答
1

丑陋的解决方案:

select a,b,...f from table1 where id in 6
UNION
select a,b,...f from table1 where id in 33
and so on..

“更好”的解决方案:在您的查询中添加另一列,然后执行案例 6,然后执行 0,案例 33,然后执行 1,依此类推

select a,b,...f , case id when 6 then 0 when 33 then 1 <and so on> end
from table1 where ...

然后按这个新列排序

于 2012-04-20T11:39:07.597 回答