在ABAP 7.02中的2个表上左联接

时间:2019-06-20 14:15:54

标签: sap abap

我想加入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 :(得分:0)

不确定,您会遇到什么错误,但这在语法上是正确的:

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 ...

答案 1 :(得分:0)

我相信,即使这些行在KNKK中不存在,也无法对所有这些表进行联接并从KNA1中选择所有客户。
SubQuery也许有办法,但我现在想不起来。
因此,我进行了2个选择并填充了2个ITAB,然后使用KUNNR&CTLPC循环进入其中一个,并通过传递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.

如果有更好的方法可以这样做,请发布。

Elias