我想根据Access DB中的两个参数对表进行排序。
如果第一个参数大于第二个参数,则表格应按升序排序,反之亦然。
答案 0 :(得分:1)
这将按{}升序顺序" ID
对我的表格进行排序;如果第一个参数大于第二个参数&#34; ,< strong>否则该字段按降序排序:
SELECT ID
FROM mytable
ORDER BY IIf([First Parameter]>[Second Parameter],[id],-[id]);
...请注意,由于我的源表中不存在[参数],因此用户提示输入它们:
我们可以有条件地撤消数字字段的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]);
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:
...最后,如果我们想要显示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");