Sql 按照caluse中给定值的相同顺序检索值

Sql 按照caluse中给定值的相同顺序检索值,sql,database,ms-access,Sql,Database,Ms Access,我有一个类似(MS ACCESS)的查询。 in caluse中的数值是一个变量。在给定的示例中,我只给出了4个。有时它超过30个数值 SELECT ID FROM TableName WHERE (ID IN (16, 18, 15, 20 )) Result : 15 ,16,18,20 是否有任何方法可以检索与caluse中的中给定值的相同顺序的值。 结果应该是这样的结果:16,18,15,20您可以这样做: SELECT DISTINC

我有一个类似(MS ACCESS)的查询。 in caluse中的
数值是一个变量
。在给定的示例中,我只给出了4个。有时它超过30个数值

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

Result : 15 ,16,18,20 
是否有任何方法可以检索与
caluse中的
中给定值的
相同顺序的值。
结果应该是这样的
结果:16,18,15,20

您可以这样做:

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
您可以这样做:

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

无法告诉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
    );

无法告诉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
    );

@Shebin您可以创建一个包含它们的临时表,并将其连接起来。我这样写是因为有其他可能的方法可以使用
CASE
表达式来实现这一点,但是对于多个值,这将是相同的问题。所以我认为将这些值作为临时表来写会更容易。@Shebin您可以创建一个包含这些值的临时表,并将其连接起来。我这样写是因为有其他可能的方法可以使用
CASE
表达式来实现这一点,但是对于多个值,这将是相同的问题。所以我想把这些值写成临时表会更容易。开关有数字限制吗?我以前从来没有达到过限制。我可以将上面的查询扩展到14个表达式/值对<代码>开关(id=1,14,id=2,13,id=3,12,id=4,11,id=5,10,id=6,9,id=7,8,id=8,7,id=9,6,id=10,5,id=11,4,id=12,3,id=13,2,id=14,1)
。。。但是,如果超过这一点,就会出现“表达式太复杂”的错误。因此,更好的解决方案是,如果出现14个以上的数字,则拆分查询。是吗?我甚至不确定上限是14个表达式/值对。也许限制是基于字符总数。除此之外,如果您可以使用多个较小的查询而不是一个较大的查询来完成所需的内容,那么对我来说这似乎是合理的。这取决于什么适合你的需要。非常感谢你的帮助:-)开关有任何数量限制吗?我以前从来没有达到过限制。我可以将上面的查询扩展到14个表达式/值对<代码>开关(id=1,14,id=2,13,id=3,12,id=4,11,id=5,10,id=6,9,id=7,8,id=8,7,id=9,6,id=10,5,id=11,4,id=12,3,id=13,2,id=14,1)
。。。但是,如果超过这一点,就会出现“表达式太复杂”的错误。因此,更好的解决方案是,如果出现14个以上的数字,则拆分查询。是吗?我甚至不确定上限是14个表达式/值对。也许限制是基于字符总数。除此之外,如果您可以使用多个较小的查询而不是一个较大的查询来完成所需的内容,那么对我来说这似乎是合理的。这取决于你需要什么。非常感谢你的帮助:-)