MS Access OrderBy with if then子句在一个细节部分中改变排序

时间:2013-09-08 19:20:11

标签: vba ms-access

我有一个三列表,JobStatus,DeliveryDate,JobSize

我想通过JobStatus(A | B | C)订购,然后是DeliveryDate(首先是最快的),然后是JobSize(最大的第一个),用于在接下来的5天内到期的工作。 5天后,然后只按JobDate订购。

OrderBy的第一部分如下,

Me.ScheduleForm.Form.OrderBy = "[JobStatus], [DeliveryDate], [JobSize] DESC"

但是,如何使用DeliverDate>为非紧急作业添加OrderBy子句的更改? 5天之后?

以下是我想在psuedo代码中做的事情:

Me.ScheduleForm.Form.OrderBy = "if ([DeliverDate] - [Today] < '5 days')
then ([JobStatus], [DeliveryDate], [JobSize] DESC)
else ([DeliveryDate]) "

1 个答案:

答案 0 :(得分:2)

听起来你需要构建一个可以对ASCending进行排序并覆盖这两种情况的字符串。一般形式类似于

IIf(DateDiff(“d”,Date(),[DeliveryDate])&lt; = 5, StringExpression1 StringExpression2

其中 StringExpression1 将以“A”开头(因此它们首先出现)并包含所有字段......

“A”&amp; [JobStatus]&amp;格式([DeliveryDate],“yyyy-mm-dd”)&amp;格式(999999 - [JobSize],“000000”)

...和 StringExpression2 将以“B”开头(所以它们最后一个)并且仅包含 [DeliveryDate]包含其他字段的常量占位符...

“B”&amp; “”&amp;格式([DeliveryDate],“yyyy-mm-dd”)&amp; “000000”