Sql 与';这';ABL声明
有人可能理解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. 对于每个中断: .... 如果第一个
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条目
希望有帮助