2

我有一个类似(MS ACCESS)的查询。. 在给定的number values in the IN caluse is a variant示例中,我只给出了 4.somethimes 它的 30 多个数字。

SELECT        ID
FROM          TableName
WHERE        (ID IN (16, 18, 15, 20 ))

Result : 15 ,16,18,20 

有什么方法可以检索calusesame order中给出的值中的值。 结果应该是这样的 IN
Result : 16,18,15,20

4

2 回答 2

3

你可以这样做:

SELECT DISTINCT t1.ID
FROM          TableName t1
INNER JOIN
(
    SELECT 1 sortorder, 16 ID
    UNION ALL
    SELECT 2, 18
    UNION ALL
    SELECT 3, 15
    UNION ALL
    SELECT 4, 20
) t2 ON t1.ID = t2.ID
ORDER BY t2.sortorder
于 2012-11-07T15:28:16.637 回答
1

无法告诉 db 引擎检查IN()列表中值的顺序并将相同的顺序应用于ORDER BY.

您可以使用Switch()表达式应用相同的排序,但是您必须保持Switch()In()同步。

SELECT id
FROM YourTable
WHERE id In (16,18,15,20)
ORDER BY 
    Switch(
        id=16,1,
        id=18,2,
        id=15,3,
        id=20,4
    );
于 2012-11-07T15:46:38.813 回答