在 Access SQL 中使用 ORDER BY 中的 IF ELSE 有条件地反转 ASC/DESC 排序顺序?

Conditionally reverse ASC/DESC sort order in Access SQL with IF ELSE in ORDER BY?

我想根据 Access DB 中的两个参数对 table 进行排序。

如果第一个参数大于第二个参数,table应该按升序排序,反之亦然。

简答:

这会将我的table按ID升序排序"if the 1st parameter is greater than the 2nd parameter",否则字段按降序排序:

SELECT ID
FROM mytable
ORDER BY IIf([First Parameter]>[Second Parameter],[id],-[id]);

...请注意,由于 [参数] 在我的源 table 中不存在,因此提示用户输入它们:


更长的答案:

我们可以有条件地反转数字字段的 ASC/DESC 排序顺序,只需 将其符号 更改为 - in an IIf ("Immediate If") ORDER BY 子句中的语句,例如:

ORDER BY IIf( {your condition here}, {sort field name} ,-{sort field name} )

...请注意 "Value if False" 表达式上的 -,它反转了 id 值上的 positive/negative 符号。我们应该指定DESC(否则"the reversal is reversed")。

例如,假设我们有一个只有一列的table:ID。我们可以用一个IIf语句来计算ID是"odd"还是"even":

IIf([id]/2=[id],"Even","Odd")

...因此,如果我们想在 even-numbered 天 和 上对我的列表 升序 进行排序]降序 odd-numbered 天,我们可以使用:

SELECT ID
FROM mytable
ORDER BY IIf(day(date())/2=day(date()),[id],-[id]);


更多关于 ORDER BY 子句中的 IIf 语句:

在 Access SQL 中,您可以在 ORDER BY 子句中使用 IIF 语句,就像在 SELECT 语句中使用它一样。

如果我们想要 return 只有 ID 字段,但是将所有 Even 数字排序到在列表顶部,整个 SQL 语句将是:

SELECT ID
FROM myTable
ORDER BY IIf([id]/2=[id],"Even","Odd");

...另一方面,如果我们希望该值 包含在查询结果中 (名称为 OddEven),则 IIf语句会出现两次:

SELECT ID, IIf([id]/2=[id],"Even","Odd") AS OddEven
FROM myTable
ORDER BY IIf([id]/2=[id],"Even","Odd");

...或将结果限制为 crtieria 之一(并显示名称为 OddEven 的字段),我们可以使用:

SELECT ID
FROM myTable
WHERE IIf([id]/2=[id],"Even","Odd")="Even"
ORDER BY IIf([id]/2=[id],"Even","Odd");

当然,最简单的方法通常是只使用查询设计器,让 Access 找出 SQL:

...最后,如果我们想显示 OddEven 字段 将结果限制为 "Even" 条记录,IIf 语句将出现 三次 次:

SELECT ID, IIf([id]/2=[id],"Even","Odd") AS OddEven
FROM mytable
WHERE (((IIf([id]/2=[id],"Even","Odd"))="Even"))
ORDER BY IIf([id]/2=[id],"Even","Odd");