【问题标题】:SQL equivalent of 'this' ABL statement'this' ABL 语句的 SQL 等效项
【发布时间】:2013-03-23 04:43:36
【问题描述】:

有人可能会理解这个 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 语句,其中&lt;breakgroup&gt; 值发生变化,对数据聚合很有用。

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

【问题讨论】:

    标签: sql vba aggregate progress-4gl


    【解决方案1】:

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

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

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

    SELECT LAST(CustomerType) WHERE CustomerType = "ValuedCustomer"
    

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

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

    Here 是该命令的 MSDN 条目!

    希望有所帮助!

    【讨论】:

      猜你喜欢
      • 2023-03-03
      • 2015-10-01
      • 1970-01-01
      • 2015-08-01
      • 2011-01-27
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多