有人可能会理解这个ABL声明...
FOR EACH <table> BREAK BY <field as breakgroup>:
....
IF FIRST-OF(<breakgroup>) THEN DO:
....
END.
....
IF LAST-OF(<breakgroup>) THEN DO:
....
END.
....
END.
上面的代码基本上循环遍历表中的各个记录,然后在执行的特定部分运行一些代码(....)。值得注意的是FIRST-OF和LAST-OF语句,<breakgroup>
值发生变化,对数据聚合很有用。
是否有人知道如何使用SQL实现/复制相同的逻辑,或许还有一些VBA?
答案 0 :(得分:2)
首先,值得注意的是,与OpenEdge ABL相反,SQL不是4GL。它不应该执行代码&#39;因此,您必须使用另一种编程语言来对数据库执行SQL语句,检索所选记录,然后使用您可能使用的任何语言对它们进行操作。
为了获得ABL FIRST-OF或LAST-OF语句的等价物,SQL FIRST()和LAST()函数将派上用场(First()和Last()解释这些。)< / p>
基本上,这意味着您必须至少执行三个不同的SQL Select语句,以选择所需的所有表条目,一个用于选择给定&#39;组中的第一个。 (毕竟,一个组只是满足某些条件的条目的子选择),而一个组是选择这样一个组的最后一个。例如
SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer"
现在,如果您想使用VBA作为编程语言,您可以使用如下命令执行SQL语句:
DoCmd.RunSQL "SELECT LAST(CustomerType) WHERE CustomerType = 'ValuedCustomer'"
Here是该命令的MSDN条目!
希望有所帮助!