在SQL(Ms-Access)中如何按自定义顺序排序?

In SQL(Ms-Access) how to Order By customized order?

本题来源于

上下文请参考

基本上我想使用下面的 SQL 查询来检索记录列表:

Select * From [TableA] Where [A_Design] In ("A", "D", "C" , "B")

据我所知,"In" 子句不能保证检索到的记录将遵循与 ("A"、"D"、"C"、"B").

我的问题是我们如何才能实现这个目标?或者如果列表是一个动态生成的长列表是否可能?


感谢 Gordon Linoff,问题已解决!以下是根据他的示例修改的工作解决方案:

select instr(",A,D,C,B,", "," & [A_Design] & ",")
from [TableA]
where [A_Design] In ("A", "D", "C" , "B")
order by 1;

也非常感谢 Luis Siquot,您的解决方案也有效,但与 Instr() 方法相比,代码稍长一些。

如此处所示,在您的 order by 子句中使用 swich

Select * From [TableA] Where [A_Design] In ("A", "D", "C" , "B")
order by switch(
     A_Design ="A", 1,
     A_Design ="D", 2,
     A_Design ="C", 3,
     A_Design ="B", 4
)

Swich 相当于标准 case when

您可以使用一堆嵌套的 iif() 语句。另一种方法是使用 instr():

select *
from TableA
where [A_Design] In ("A", "D", "C" , "B")
order by instr("ADCB", A_Design);

注意:这适用于单字符代码。对于更长的代码,您应该使用定界符:

select *
from TableA
where [A_Design] In ("A", "D", "C" , "B")
order by instr(",A,D,C,B,", "," & A_Design & ",");