SQL相当于'this'ABL语句

时间:2013-03-23 04:43:36

标签: 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.

上面的代码基本上循环遍历表中的各个记录,然后在执行的特定部分运行一些代码(....)。值得注意的是FIRST-OF和LAST-OF语句,<breakgroup>值发生变化,对数据聚合很有用。

是否有人知道如何使用SQL实现/复制相同的逻辑,或许还有一些VBA?

1 个答案:

答案 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条目!

希望有所帮助!