在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 & ",");
本题来源于
上下文请参考
基本上我想使用下面的 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 & ",");