在具有多个LEFT JOIN和WHERE条件的CDS视图创建方面需要帮助

2020-09-16 15:14发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试创建CDS视图以从4个表(ACDOCA,KNA1,MAKT和ADRC)中提取数据。 我的要求是显示ACDOCA的所有记录,即使KNA1或MAKT中没有相应的引用记录也是如此。 下面是我的写法:

 @ AbapCatalog.sqlViewName:'ZV_CDS_TEST'
 @ AbapCatalog.compiler.CompareFilter:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:" CDS测试视图"
 将视图ZVA_CDS_TEST定义为从acdoca中选择
 左外连接kna1
     在kna1.kunnr = acdoca.kunnr
 左外连接
     在makt.matnr = acdoca.matnr
 左外连接adrc
     在adrc.addrnumber = kna1.adrnr上
 {
   acdoca.poper作为poper,
   acdoca.budat作为budat,
   acdoca.gjahr作为gjahr,
   acdoca.rbukrs作为rbukrs,
   acdoca.re_account作为re_account,
   kna1.erdat作为erdat,
   acdoca.matnr作为matnr,
   makt.maktx作为maktx,
   acdoca.kunnr作为kunnr,
   kna1.name1作为name1,
   kna1.brsch作为brsch,
   kna1.adrnr作为adrnr,
   adrc.country作为国家/地区,
   acdoca.rtcur作为rtcur,
   acdoca.tsl as tsl,
   adrc.date_to作为date_to
 在哪里
     makt.spras ='E'AND
     adrc.date_to ='99991231'
 

现在,由于WHERE子句,上面的内容我没有看到表ACDOCA中的所有记录,但同时,我想基于这些条件来限制MAKT和ADRC记录。

这可以通过CDS完成吗?还是必须将其拆分为多个CDS视图?还是最好使用多个SELECT查询和合并逻辑来创建报告?

谢谢

Shrinivas

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在尝试创建CDS视图以从4个表(ACDOCA,KNA1,MAKT和ADRC)中提取数据。 我的要求是显示ACDOCA的所有记录,即使KNA1或MAKT中没有相应的引用记录也是如此。 下面是我的写法:

 @ AbapCatalog.sqlViewName:'ZV_CDS_TEST'
 @ AbapCatalog.compiler.CompareFilter:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:" CDS测试视图"
 将视图ZVA_CDS_TEST定义为从acdoca中选择
 左外连接kna1
     在kna1.kunnr = acdoca.kunnr
 左外连接
     在makt.matnr = acdoca.matnr
 左外连接adrc
     在adrc.addrnumber = kna1.adrnr上
 {
   acdoca.poper作为poper,
   acdoca.budat作为budat,
   acdoca.gjahr作为gjahr,
   acdoca.rbukrs作为rbukrs,
   acdoca.re_account作为re_account,
   kna1.erdat作为erdat,
   acdoca.matnr作为matnr,
   makt.maktx作为maktx,
   acdoca.kunnr作为kunnr,
   kna1.name1作为name1,
   kna1.brsch作为brsch,
   kna1.adrnr作为adrnr,
   adrc.country作为国家/地区,
   acdoca.rtcur作为rtcur,
   acdoca.tsl as tsl,
   adrc.date_to作为date_to
 在哪里
     makt.spras ='E'AND
     adrc.date_to ='99991231'
 

现在,由于WHERE子句,上面的内容我没有看到表ACDOCA中的所有记录,但同时,我想基于这些条件来限制MAKT和ADRC记录。

这可以通过CDS完成吗?还是必须将其拆分为多个CDS视图?还是最好使用多个SELECT查询和合并逻辑来创建报告?

谢谢

Shrinivas

付费偷看设置
发送
2条回答
ZJXianG
1楼-- · 2020-09-16 15:48

加德,你好

尝试将您的MAKT和ADRC选择移到相应的LEFT OUTER JOIN子句ON条件。

关于Ulad,

槿木_熙
2楼-- · 2020-09-16 15:48

恐怕您不能根据需要使用连接,因为:带连接的SELECT语句的WHERE条件将应用于使用连接创建的结果集。 您可以在这里阅读有关内容:

https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en -US/abapselect_join.htm

您是否考虑改为使用关联? 关联内部有过滤器,您可以尝试。 在此处阅读更多信息:

https://blogs.sap。 com/2017/03/07/inner-join-with-cds-associations-abap-on-hana/

一周热门 更多>