在Epicor 9 BAQ编辑器中区别或分组

时间:2015-10-01 01:38:27

标签: progress-4gl openedge epicorerp

我需要在业务活动查询中将TranGLC表连接到Epicor 905中的APInvDtl表。

我目前正在加入Company, VendorNum, InvoiceNum, InvoiceLine, JobNum,但无法看到任何其他适合加入的列。

我的问题是join没有唯一标识APInvDtl表中的记录,所以如果我的查询从TranGLC返回14行,当我加入这两个表时,我得到196条记录。

在sql中我可以使用Distinct关键字,我得到了我正在寻找的结果,但我无法在BAQ编辑器中看到这样做的方法。

我也可以通过使用SQL组来查找我想要的结果,但是我再也不知道如何在BAQ编辑器中这样做。

我已经研究过ABL,看起来你可以做一个ABL代码中的第一个代码,它可能以相同的方式分组,但是我无法看到如何做到这一点。 BAQ编辑也是。

非常感谢有关如何从结果集中删除重复项的任何建议。

1 个答案:

答案 0 :(得分:1)

如果没有你的代码,很难知道从哪里开始。

通常加入是这样的:

FOR EACH table1 NO-LOCK, [EACH|FIRST|LAST] table2 WHERE table1.id = table2.id:
END.

根据您的信息,您有2个EACH - 意味着您迭代两个表中的所有记录。没有更多的信息,很难移动一个。也许你需要这样做:

FOR EACH table1 NO-LOCK, FIRST table2 NO-LOCK WHERE [...]

或者正如你所说的BREAK BY。那将是这样的:

FOR EACH table1 NO-LOCK, 
    EACH table2 NO-LOCK WHERE [...] BREAK BY table1.id1 BY table2.id2:

    IF FIRST-OF(table1.id1) THEN DO:
      /* Something */
    END.

    IF LAST-OF(table1.id1) THEN DO:
      /* Something */
    END.
END.

你也可以FIRST(table1.id1)LAST(table1.id1) - 在“全局”的第一个和最后一个组而不是每个组中返回true。

/* Long example */
DEFINE TEMP-TABLE ttTest NO-UNDO
    FIELD a AS CHARACTER FORMAT "X" LABEL "A"
    FIELD b AS CHARACTER FORMAT "X" LABEL "B".


CREATE ttTest.
ASSIGN ttTest.a = "a"
       ttTest.b = "b".

CREATE ttTest.
ASSIGN ttTest.a = "a"
       ttTest.b = "b".

CREATE ttTest.
ASSIGN ttTest.a = "a"
       ttTest.b = "b".

CREATE ttTest.
ASSIGN ttTest.a = "a"
       ttTest.b = "b".

CREATE ttTest.
ASSIGN ttTest.a = "b"
       ttTest.b = "b".

CREATE ttTest.
ASSIGN ttTest.a = "b"
       ttTest.b = "b".


CREATE ttTest.
ASSIGN ttTest.a = "b"
       ttTest.b = "c".

CREATE ttTest.
ASSIGN ttTest.a = "c"
       ttTest.b = "c".

FOR EACH ttTest NO-LOCK BREAK BY ttTest.a BY ttTest.b:

    DISPLAY ttTest.

    IF FIRST(ttTest.a) THEN DISPLAY "X" COLUMN-LABEL "F(a)".

    IF FIRST(ttTest.b) THEN DISPLAY "X" COLUMN-LABEL "F(b)".

    IF FIRST-OF(ttTest.a) THEN DISPLAY "X" COLUMN-LABEL "F-O(a)".

    IF FIRST-OF(ttTest.b) THEN DISPLAY "X" COLUMN-LABEL "F-O(b)".

    IF LAST-OF(ttTest.a) THEN DISPLAY "X" COLUMN-LABEL "L-O(ta)".

    IF LAST-OF(ttTest.b) THEN DISPLAY "X" COLUMN-LABEL "L-O(b)".

    IF LAST(ttTest.a) THEN DISPLAY "X" COLUMN-LABEL "L(a)".

    IF LAST(ttTest.b) THEN DISPLAY "X" COLUMN-LABEL "L(b)".

END.

会导致: enter image description here