Отличается или группируется в 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.