在 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");
我想根据 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");