Sql 与';这';ABL声明

Sql 与';这';ABL声明,sql,vba,aggregate,progress-4gl,Sql,Vba,Aggregate,Progress 4gl,有人可能理解ABL的声明 FOR EACH <table> BREAK BY <field as breakgroup>: .... IF FIRST-OF(<breakgroup>) THEN DO: .... END. .... IF LAST-OF(<breakgroup>) THEN DO: .... END. .... END. 对于每个中断: .... 如果第一个

有人可能理解ABL的声明

FOR EACH <table> BREAK BY <field as breakgroup>: 
   ....
   IF FIRST-OF(<breakgroup>) THEN DO:
       ....
   END.
   ....
   IF LAST-OF(<breakgroup>) THEN DO:
       ....
   END.
   ....
END.
对于每个中断:
....
如果第一个为-OF(),则执行以下操作:
....
结束。
....
如果是()的最后一个-OF,则执行以下操作:
....
结束。
....
结束。
上面的代码基本上在表中的各个记录之间循环,然后在执行的特定部分运行一些代码(..)。值得注意的是FIRST-OF和LAST-OF语句,
值在其中发生变化,这对数据聚合非常有用


有人知道如何使用SQL实现/复制相同的逻辑吗?可能还有一些VBA?

首先,值得注意的是,与OpenEdge ABL相反,SQL不是4GL。它本身不应该“执行代码”,因此您必须使用另一种编程语言对数据库执行SQL语句,检索所选记录,然后使用您可能使用的任何语言对它们进行操作

为了获得ABL FIRST-of或LAST-of语句的等价物,SQL FIRST()和LAST()函数将派上用场(并解释它们)

基本上,这意味着您必须至少执行三种不同的SQL Select语句,一种选择您想要的所有表项,一种选择给定“组”中的第一个(毕竟,组只是满足特定条件的项的子选择),另一种选择这样一个组中的最后一个。比如说

SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer"
现在,如果您想使用VBA作为编程语言,您可以使用如下命令执行SQL语句:

DoCmd.RunSQL "SELECT LAST(CustomerType) WHERE CustomerType = 'ValuedCustomer'"
是该命令的MSDN条目

希望有帮助