在ABAP CDS的join条件中,如果两张表比较的字段类型相同但长度不同,会报type conflict,无法激活,而且join条件中无法使用子查询、left、right等函数对on的值进行处理。
例如,你想join系统发票行项目表vbrp和采购订单行项目表ekpo,就会发现编辑器报vbrp-vgpos和ekpo-ebeln类型冲突,分析可发现这两个字段都是NUMC类型,但长度不一样。
遇到这种情况,可以考虑把on条件type conflict的字段写到where条件里,虽然实现上没有那么完美,但也能解决问题。DEMO如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
@AbapCatalog.sqlViewName: 'ZVRPO_CDS' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: '系统发票和采购订单行项目关联' define view ZVRPO as select distinct from vbrk as a inner join vbrp as b on b.vbeln = a.vbeln left outer join ekpo as p on b.aubel = p.ebeln { b.vbeln b.posnr b.vgbel b.vgpos a.kurrf, b.wavwr * b.kursk as cost, b.mwsbp * a.kurrf as mwsbp_lc, b.prctr, a.fkart, a.fkdat, a.fksto, --冲销字段标识 a.sfakn, --被此凭证冲销的发票 a.rfbsk, --发票过账状态 // p...... } where p.ebelp = right( b.aupos, 5 ) |
本文作者: GavinDong
版权属于: GavinDong博客
文章链接: https://gavindong.com/3908.html
如果使用过程中遇到问题,可 **点击此处** 交流沟通。
版权所有,转载时必须以链接形式注明作者和原始出处及本声明。