如何“组由” 4GL中使用变量

问题描述 投票:0回答:2

是否有一个4GL查询中的方式来组记录由表中的一个字段?

我的代码。

  define variable v-invoice     as inte    no-undo.
define variable v-sell-price  as decimal no-undo.
define variable v-cost-price  as decimal no-undo. 
define variable iinv          as integer no-undo.

For each Order no-lock :

v-invoice      = Order.tblinvoice.
v-sell-price   = Order.sell-price.
v-cost-price   = Order.cost-price. 
iinv           = iinv + Order.sell-price.

   display Order.invoice Order.sell-price.
end.

enter image description here

谢谢

openedge progress-4gl
2个回答
4
投票

是的,当然可以,非常简单:

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

FOR EACH order BREAK BY order.invoice:

    /* Sum the prices */
    ASSIGN 
        v-sell-price = v-sell-price + Order.sell-price.
        v-cost-price = v-cost-price + Order.cost-price. 

    /* On the last order matching this order display and reset sums */
    IF LAST-OF(order.invoice) THEN DO:

        DISPLAY Order.invoice v-sell-price v-cost-price.
        ASSIGN 
            v-sell-price = 0
            v-cost-price = 0.
    END.
END.

1
投票

其实这是个什么ACCUMULATE语句和ACCUM功能都是为了。我觉得对于那些有点难以记得确切的语法(有时很难理解,甚至阅读在线帮助后),所以我常常诉诸Jensd的回答积累变量自己等。您的示例中的代码看起来应该像这样(语法检查,但是未测试):

FOR EACH order BREAK BY order.invoice:

    accumulate Order.sell-price (sub-total by order.invoice).
    accumulate Order.cost-price (sub-total by order.invoice).

    IF LAST-OF(order.invoice) THEN

        DISPLAY Order.invoice 
          accum sub-total by order.invoice Order.sell-price
          accum sub-total by order.invoice Order.cost-price.
END.
© www.soinside.com 2019 - 2024. All rights reserved.