有没有办法按照4gl查询中的表内字段对记录进行分组?
我的代码。
将变量v-invoice定义为inte no-undo。将变量v-sell-price定义为十进制无撤消。定义……
是的,当然你可以,非常基本的:
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.
实际上这就是ACCUMULATE STATEMENT和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.