ABAP 基础知识表关联使用不同内容的字段

作者:ABAP技巧与实战 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, 开发, 数据工程

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

如果你写过报表尝试关联LIPS 与 EKPO ,会发现二者关联的行项目字段长度不一致,内容也不一致 , LIPS-VGPOS = 比EKPO-EBELP

多了一个前面的0 (因为VGPOS定义位6位NUM), 所以会多一个前置0.

无法再JOIN 条件中直接写等式关联

**本文主要介绍怎么使用不同内容的字段进行表关联**

_当然前提是这两个字段内容有固定的规律_

_长度不一致, 但是内容一致的可以直接关联_

LIPS&EKPO

后续以LIPS 与 EKPO表关联为例

二者的关联条件如下.

LIPS-VGBEL = EKPO-EBELN

LIPS-VGPOS+1(5) = EKPO-EBELP.( LIPS-VGPOS的后5位=EKPO-EBELP)

ps: 关于几种JOIN的区别示例图

ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图

实现方法

如果你的SAP版本不支持新的ABAP语法.可以使用如下两种方法

• 间接法

• 增强法

_**01** _

**间接法**

可以通过自定义表ZTPOSNR建立 5位NUMC与6位NUMC的关系, 该表维护99999条记录

NUMC5 NUMC6

00001 000001

00002 000002

00010 000010

……

关联时通过该表中转一下

LIPS INNER JOIN ZTPOSNR

ON ZTPOSNR~NUMC6 = LIPS~NUMC5

INNER JOIN EKPO

ON EKPO~EBELN = LIPS~VGBEL

AND EKPO~EBELP = ZTPOSNR~NUMC5

_**02** _

**增强法**

在LIPS中增强字段 ZZEBELP (同EBELP长度) .

在BADI

LE_SHP_DELIVERY_PROC

方法

IF_EX_LE_SHP_DELIVERY_PROC~FILL_DELIVERY_ITEM 中赋值

LIPS-ZZEBELP = LIPS-VGPOS+1(5).

后续关联可以直接用LIPS~ZZEBELP = EKPO~EBELP

新语法

支持ABAP新语法的版本不用这么麻烦. 可以直接用sql 函数实现

测试验证, 这种写法可以成功

INNER JOIN ekpo AS i ON i~ebeln = p~vgbel AND concat( '0',i~ebelp ) = p~vgpos

这种写法ABAP中不允许,函数只能在等式左边使用.

INNER JOIN ekpo AS i ON i~ebeln = p~vgbel AND i~ebelp = right( p~vgpos, 5 )

HANA SQL

HANASQL语句则同时允许两种写法

select a.vbeln,a.posnr,b.ebelp from lips as a inner join ekpo as b on b.mandt

= a.mandt and b.ebeln = a.vgbel and b.ebelp = right(a.vgpos,5)

select a.vbeln,a.posnr,b.ebelp from lips as a inner join ekpo as b on b.mandt

= a.mandt and b.ebeln = a.vgbel and concat('0',b.ebelp) = a.vgpos

CDS语法

CDS 视图是构造在ABAP于数据库之间,可以通过用CDS视图加工数据,ABAP可以直接访问加工后的数据视图. HANA数据库中也可以直接使用CDS视图.

CDS中 两个字段关联会报错

ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图

可以使用right(a.vgpos,5)

ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图

不支持concat 后参与连接

ABAP 基础知识表关联使用不同内容的字段 - 封面图
ABAP 基础知识表关联使用不同内容的字段 - 封面图

总结

新语法的OPEN SQL不再局限于支持所有数据库SQL, (实际上现在的S4/HANA版本似乎只能安装在HANA数据库上),

所以基本上HANA数据库支持的SQL写法, ABAP都能找到对应的语法支持,

但二者并不完全等同,还是有很多HANA SQL支持的写法, ABAP OPEN SQL 不支持.

可以在ABAP中执行NATIVE SQL 语句 来解决ABAP OPEN SQL 不支持的数据库语句,以提高程序的效率.

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ ABAP基础知识 怎么访问HANA数据库中的其它CATALOG的表

> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487740&idx=1&sn=06f69f335cdab7004e9db430d1d44f35&chksm=cf5dcdcaf82a44dcae6d181c2116b2c1f287c5126e176e3a1826183847933f091ca39f651749#rd)

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP基础知识表关联使用不同内容的字段.md」整理生成,仅用于内部技术分享与学习交流。