ABAP inner join重复记录

[复制链接]
查看11 | 回复9 | 2011-11-1 16:25:51 | 显示全部楼层 |阅读模式
select a~vbeln a~posnr a~kwmeng c~bmeng c~edatu
into (itab-vbeln,itab-posnr,itab-kwmeng,itab-bmeng,itab-edatu)
from vbap as a inner join vbkd as b on a~vbeln = b~vbeln

inner join vbep as c on a~vbeln = c~vbeln and a~posnr = c~posnr
where b~bstkd = itab-ebeln and a~posex = itab-ebelp and c~bmeng''.
move-corresponding itab to itab_data.
itab_data-index = itab_data-index + 1.
append itab_data.
endselect.
请大家帮我看看以上语句,我用VBAP,VBKD,VBEP三个表内连接,VBKD里的PO和VBAP里的item都取内表的数据,
然后找出VBEP里scheduline 的确认数据,为什么找出的数据每一笔都会重复?

回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
这样直接join VBKD是不正确的,一方面是会出现重复记录,另一方面是取的数据可能不对。
VBKD既保存Header数据,也可以保存Item数据,如果一个SO Item有它自己的一条VBKD记录,直接join就会出现重复记录。
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
原来如此,看来只有分开来取了。
多谢帮忙!
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
另请教ABAP 有没有一个语句是可以取排序后所需要的第几笔数据,例如需要去EKES表中按delivery date排序后确认的第二笔数据,
有没有类似于这样的 写法:select singel top 2 from ekes where ebeln = itab_data-ebeln and ebelp = itab_data-ebelp and ebtyp = 'AB' order by eindt.
我现在的做法很笨,就是把所有结果先取出来后排序,然后根据Index去read。感觉这样很麻烦。
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
tianshaguxing20 发表于 2012-9-23 16:05
另请教ABAP 有没有一个语句是可以取排序后所需要的第几笔数据,例如需要去EKES表中按delivery date排序后确 ...

用UP TO n ROWS可以实现TOP n的效果
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
rosefish 发表于 2012-9-23 13:11
这样直接join VBKD是不正确的,一方面是会出现重复记录,另一方面是取的数据可能不对。
VBKD既保存Header数 ...


是的,完全正确!!
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
tianshaguxing20 发表于 2012-9-23 14:09
原来如此,看来只有分开来取了。
多谢帮忙!

三个表可以分开去,VBKD单取值!!
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
本帖最后由 tianshaguxing2010 于 2012-9-24 11:43 编辑
多谢各位的解答!
程式已经完成,但是运行时只要数据稍大,就会出现runtime error,错误指在下面的的语句:
select single *into corresponding fields of vbkd from vbkd where bstkd = itab-ebeln and posnr = '000000'.
这个语句只是通过vbkd 的PO number查询SO而已,不知为什么会报错。改成下面的都试过了也还是不行:
select single *from vbkd where bstkd = itab-ebeln and posnr = '000000'.
select single vbeln into l_vbelnfrom vbkd where bstkd = itab-ebeln and posnr = '000000'.
后台运行没有问题,请各位高手指点。
晕,图片显示不了。

回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
tianshaguxing20 发表于 2012-9-24 11:32
多谢各位的解答!
程式已经完成,但是运行时只要数据稍大,就会出现runtime error,错误指在下面的的语句: ...

如果是要通过Customer PO number来查SO,SAP标准一般使用view M_VMVAA,可以参考下。
而用一个非关键字作为条件来直接读取VBKD肯定是有严重性能问题的,出现runtime error也就不要奇怪。
回复

使用道具 举报

千问 | 2011-11-1 16:25:51 | 显示全部楼层
rosefish 发表于 2012-9-24 12:38
如果是要通过Customer PO number来查SO,SAP标准一般使用view M_VMVAA,可以参考下。
而用一个非关键字作 ...

太强了!!五体投地!



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行