0

有人可能会理解这个 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?

4

1 回答 1

2

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

要获得等效的 ABL FIRST-OF 或 LAST-OF 语句,SQL FIRST() 和 LAST() 函数将派上用场(First()Last()解释了这些。)

基本上,这意味着我认为您将必须执行至少三个不同的 SQL Select 语句,以选择您想要的所有表条目,一个选择给定“组”中的第一个(毕竟,一个组是只是满足某些条件的条目的子选择)和一个​​选择此类组中的最后一个。例如

SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer"

现在,如果您想使用 VBA 作为您的编程语言,您可以使用如下命令执行 SQL 语句:

DoCmd.RunSQL "SELECT LAST(CustomerType) WHERE CustomerType = 'ValuedCustomer'"

是该命令的 MSDN 条目!

希望有帮助!

于 2013-03-25T12:24:23.077 回答