我需要在业务活动查询中将TranGLC表连接到Epicor 905中的APInvDtl表。
我目前正在加入Company, VendorNum, InvoiceNum, InvoiceLine, JobNum
,但无法看到任何其他适合加入的列。
我的问题是join没有唯一标识APInvDtl表中的记录,所以如果我的查询从TranGLC返回14行,当我加入这两个表时,我得到196条记录。
在sql中我可以使用Distinct关键字,我得到了我正在寻找的结果,但我无法在BAQ编辑器中看到这样做的方法。
我也可以通过使用SQL组来查找我想要的结果,但是我再也不知道如何在BAQ编辑器中这样做。
我已经研究过ABL,看起来你可以做一个ABL代码中的第一个代码,它可能以相同的方式分组,但是我无法看到如何做到这一点。 BAQ编辑也是。
非常感谢有关如何从结果集中删除重复项的任何建议。
答案 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.