You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP中EKKO、EKPO与EKBE表的正确连接逻辑及收货数据获取

SAP中EKKO、EKPO、EKBE三张表的正确连接逻辑

表关联基础

三张表的核心关联规则:

  • EKKO(采购订单抬头)与EKPO(采购订单行项目):通过**EBELN(采购订单编号)**关联,一个抬头对应多个行项目。
  • EKPO与EKBE(采购订单历史记录):通过**EBELN(采购订单编号) + EBELP(行项目号)**关联,一个行项目可对应多条历史记录(如多次收货、发票校验)。

你的当前代码问题

你使用LEFT JOIN EKBE后在WHERE子句过滤EKBE.BEWTP = 'E',这会把原本LEFT JOIN保留的“无收货的采购订单行项目”全部过滤掉,实际效果等同于INNER JOIN EKBE。如果需求是仅获取有收货记录的行项目,结果没问题,但写法不够严谨;如果要保留所有行项目并显示对应收货(无收货则为空),这个逻辑就错误了。

针对“获取采购订单下所有收货记录”的正确写法

场景1:仅获取存在收货记录的采购订单及对应收货

SELECT "required columns"
FROM EKKO
INNER JOIN EKPO ON EKKO.EBELN = EKPO.EBELN
INNER JOIN EKBE ON EKPO.EBELN = EKBE.EBELN 
               AND EKPO.EBELP = EKBE.EBELP
               AND EKBE.BEWTP = 'E' -- E代表收货(Goods Receipt)

场景2:保留所有采购订单行项目,同时关联对应收货记录(无收货则显示空)

SELECT "required columns"
FROM EKKO
INNER JOIN EKPO ON EKKO.EBELN = EKPO.EBELN
LEFT JOIN EKBE ON EKPO.EBELN = EKBE.EBELN 
              AND EKPO.EBELP = EKBE.EBELP
              AND EKBE.BEWTP = 'E' -- 将收货类型过滤放在JOIN条件中,而非WHERE

补充说明

  • BEWTP = 'E'是SAP标准的收货交易类型,若需更精准区分收货场景,可结合EKBE.VGABE字段(如VGABE = 1代表入库收货)。

内容的提问来源于stack exchange,提问作者Sanjai Palliyil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:15:19