检索值与IN子句中给出的值的顺序相同

时间:2012-11-07 15:26:25

标签: sql database ms-access

我有一个像(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 

有没有办法检索same order caluse中给出的IN值。
结果应该是Result : 16,18,15,20

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

无法告诉数据库引擎检查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
    );