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

时间:2018-03-16 03:42:04

标签: sorting ms-access sql-order-by

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

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

1 个答案:

答案 0 :(得分:1)

简答:

这将按{}升序顺序&#34; ID对我的表格进行排序;如果第一个参数大于第二个参数&#34; ,< strong>否则该字段按降序排序:

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

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

example

更长的答案:

我们可以有条件地撤消数字字段的ASC / DESC排序顺序,只需通过更改标记并使用-即可IIf子句中的ORDER BY"Immediate If")语句,如:

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

...请注意{34}上的-;如果为假,则为#34;表达式,它反转id值的正/负符号。我们应该指定DESC(否则&#34;逆转反转&#34;)。

例如,我们假设我们的表只有一列:ID。我们可以计算ID是否是&#34;奇数&#34;或者&#34;甚至&#34;使用IIf声明:

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

...所以,如果我们要在偶数天对 Ascending 进行排序,并在奇数上对 Descending 进行排序编号天,我们可以使用:

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

Results

有关IIf条款中ORDER BY语句的更多信息:

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

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

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

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

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

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

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

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

query

...最后,如果我们想要显示OddEven字段,请将结果限制为&#34;偶数&#34;记录,IIf语句将显示三次次:

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