我想加入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种选择方法吗?
答案 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