Отличается или группируется в Epicor 9 BAQ editor

Мне нужно соединить таблицу TranGLC с таблицей APInvDtl в Epicor 905 в запросе бизнес-активности.

Я в настоящее время присоединяюсь к Company, VendorNum, InvoiceNum, InvoiceLine, JobNum и не может видеть другие столбцы, которые подходят для объединения.

Моя проблема в том, что объединение не уникально идентифицирует записи в таблице APInvDtl, поэтому, если мой запрос возвращает 14 строк из TranGLC, когда я соединяю две таблицы, я получаю 196 записей.

В SQL я могу использовать ключевое слово Distinct, и я получаю результаты, которые я ищу, но я не могу найти способ сделать это в редакторе BAQ.

Я также могу получить результаты, которые я ищу, с помощью группы SQL, но, опять же, я не знаю, как это сделать в редакторе BAQ.

Я исследовал ABL, и похоже, что вы можете сделать первый шаг в коде ABL, который может вести себя так же, как и группа, но я не могу понять, как это сделать в редакторе BAQ.

Будем весьма благодарны за любые предложения о том, как удалить дубликаты из набора результатов.

1 ответ

Решение

Без вашего кода трудно понять, с чего начать.

Как правило, соединение выполняется так:

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

Исходя из вашей информации, у вас есть 2 КАЖДЫХ - это означает, что вы повторяете все записи в обеих таблицах. Без дополнительной информации трудно переместить один. Возможно, вам нужно сделать:

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.

Приведет к: введите описание изображения здесь

Другие вопросы по тегам