如何使用4gl中的变量“分组”


小鬼
2025-03-12 01:10:45 (3天前)


有没有办法按照4gl查询中的表内字段对记录进行分组?

我的代码。

将变量v-invoice定义为inte no-undo。
将变量v-sell-price定义为十进制无撤消。
定义……

3 条回复
  1. 0# 记忆只剩空城 | 2019-08-31 10-32



    是的,当然你可以,非常基本的:




    1. DEFINE VARIABLE v-sell-price AS INTEGER NO-UNDO.
      DEFINE VARIABLE v-cost-price AS INTEGER NO-UNDO.

    2. FOR EACH order BREAK BY order.invoice:

    3. /* Sum the prices */
    4. ASSIGN 
    5.     v-sell-price = v-sell-price + Order.sell-price.
    6.     v-cost-price = v-cost-price + Order.cost-price. 
    7. /* On the last order matching this order display and reset sums */
    8. IF LAST-OF(order.invoice) THEN DO:
    9.     DISPLAY Order.invoice v-sell-price v-cost-price.
    10.     ASSIGN 
    11.         v-sell-price = 0
    12.         v-cost-price = 0.
    13. END.
    14. END.

    15. </code>

  2. 1# 一腔诗意喂了狗 | 2019-08-31 10-32



    实际上这就是ACCUMULATE STATEMENT和ACCUM功能的用途。
    我找到了那些有点难以记住的确切语法(有时甚至在阅读了在线帮助后很难理解),所以我常常像Jensd的答案​​那样自己积累变量。
    您的示例的代码应如下所示(语法已检查但未经过测试):




    1. FOR EACH order BREAK BY order.invoice:

    2. accumulate Order.sell-price (sub-total by order.invoice).
    3. accumulate Order.cost-price (sub-total by order.invoice).
    4. IF LAST-OF(order.invoice) THEN
    5.     DISPLAY Order.invoice 
    6.       accum sub-total by order.invoice Order.sell-price
    7.       accum sub-total by order.invoice Order.cost-price.
    8. END.

    9. </code>

登录 后才能参与评论