Оставьте соединение на 2 таблицы в ABAP 7.02 - PullRequest
1 голос
/ 20 июня 2019

Я хочу объединить 4 таблицы T001, KNKK, KNB1 и KNA1, чтобы получить всех клиентов из KNB1 / KNA1 и их категории риска в KNKK.

Нам нужно левое соединение из KNKK, но условие соединенияна основе 2 таблиц: T001-KKBER и KNA1-KUNNR.

Но я получаю синтаксическую ошибку:

Невозможно сравнить с "T001 ~ KKBER".Таблица может быть объединена максимум с одной другой таблицей, используя LEFT OUTER JOIN.

Выбор:

SELECT knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
       INTO TABLE git_kunnr_tab
       FROM kna1
       INNER JOIN knb1
       ON kna1~kunnr EQ knb1~kunnr
       INNER JOIN t001
       ON knb1~bukrs EQ t001~bukrs
       LEFT JOIN knkk
       ON knb1~kunnr EQ knkk~kunnr AND
          t001~kkber EQ knkk~kkber
       WHERE knb1~kunnr IN s_kunnr
          AND knb1~bukrs = p_bukrs.

Наша система старая ECC6 7.02, поэтому мы не можем реализоватьновые возможности ABAP.

Есть ли способ сделать это за 1 выбор?

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Я считаю, что невозможно объединить все эти таблицы и выбрать ВСЕХ клиентов из KNA1, даже если их нет в KNKK.
Может быть, есть способ с SubQuery, но я не могу сейчас думать о чем-то.
Итак, я сделал 2 выбора и заполнил 2 ITAB, а затем зациклился на одном с помощью KUNNR & CTLPC и изменил 2, передав значение CTLPC.Итак, код теперь:

select knb1~kunnr kna1~name1 kna1~lifnr knb1~akont
           knb1~fdgrv knb1~frgrp 
          into table git_kunnr_tab
        from knb1 as knb1 left join kna1 as kna1
            on knb1~kunnr = kna1~kunnr
        where knb1~kunnr in s_kunnr
          and knb1~bukrs = p_bukrs.

select knkk~kunnr knkk~ctlpc into table lit_kunnr_risk
    from knkk as knkk inner join t001 as t001
        on knkk~kkber = t001~kkber
    where t001~bukrs = p_bukrs and
          knkk~ctlpc <> ''.

  sort git_kunnr_tab by kunnr.
  loop at lit_kunnr_risk into lwa_kunnr_risk.
    gwa_kunnr_tab-ctlpc = lwa_kunnr_risk-ctlpc.
    modify git_kunnr_tab from gwa_kunnr_tab transporting ctlpc
                         where kunnr = lwa_kunnr_risk-kunnr.
    clear gwa_kunnr_tab.
  endloop.

Если есть лучший способ сделать это, пожалуйста, опубликуйте его.

Илия

0 голосов
/ 20 июня 2019

Не уверен, какую ошибку вы получите, но это синтаксически правильно:

SELECT ...
       INTO TABLE ...
       FROM kna1
       INNER JOIN knb1
       ON kna1~kunnr EQ knb1~kunnr
       INNER JOIN t001
       ON knb1~bukrs EQ t001~bukrs
       LEFT JOIN knkk
       ON knb1~kunnr EQ knkk~kunnr AND
          t001~kkber EQ knkk~kkber
       WHERE ...
...