CDS ABAP-两个CDS视图的合并/联合,但需要单独的金额字段

2020-09-10 10:54发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)您好,我正在尝试合并两个单独的C...

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

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


您好,我正在尝试合并两个单独的CDS视图-本年度数据和上年度数据。

这些视图具有完全相同的列(如下所示),但前5列中的数据可能有所不同-使某些条目唯一(例如,下面完全突出显示的行)。

我需要实现的效果显示在下面的屏幕截图中:

*如果当前和优先级中的前5列均匹配,则联接表需要在当前和优先级列中均显示一行且金额相同。

*如果"当前"中有一个条目与"先验"中的一行不完全匹配,则需要在联接表中将"先验"金额显示为零。 (反之亦然)

我本质上在寻找的是完全外部联接。 我尝试了所有形式的Joins和Unions,但没有一个给我预期的结果。 当我尝试输入完全外部联接时,出现错误,因为它无法识别单词" full"(见下文)

有人做过类似的事情吗? 这让我发疯,所以任何输入都会大受好评!

谢谢。

Pete

screenshot1.jpg (65.1 kB)
5条回答
nice_wp
2020-09-10 11:25

您可以使用以下示例:

第一个"虚拟" CDS包含当月的数据:

 @ AbapCatalog.sqlViewName:'ZZZJC_004A_V'
 @ AbapCatalog.compiler.compareFilter:是
 @ AbapCatalog.preserveKey:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:'ZZZJC_004Current'
 定义视图ZZZJC_004Current
 如
 从t000中选择虚拟
 {
       键" 1"作为GLAccount
     ,将键" S"作为供应商名称
     ,将''作为BA
     ,以''作为贸易伙伴
     ,将键" Z"作为CustomerName
    
     ,金额为10
 }
 哪里
 Dummy.mandt = $ session.client

 从t000作为Dummy进行联合选择{密钥'2'作为GLAccount,密钥''作为VendorName,密钥''作为BA,密钥'T'作为TradingPartner,密钥''作为CustomerName,20作为金额}其中Dummy.mandt = $ session  。客户
 工会从t000中选择Dummy {键'3'作为GLAccount,键''作为VendorName,键''作为BA,键''作为TradingPartner,键''作为CustomerName,30作为金额},其中Dummy.mandt = $ session。 客户
 联合从t000中选择作为Dummy {键'4'作为GLAccount,键'W'作为VendorName,键''作为BA,键''作为TradingPartner,键''作为CustomerName,40作为金额}其中Dummy.mandt = $ session  。客户
 从t000作为Dummy进行联合选择{键'5'作为GLAccount,键'X'作为VendorName,键''作为BA,键'Z'作为TradingPartner,键''作为CustomerName,50作为金额}其中Dummy.mandt = $ 会话客户端
 

第二个"虚拟" CDS包含上个月的数据:

 @ AbapCatalog.sqlViewName:'ZZZJC_004B_V'
 @ AbapCatalog.compiler.compareFilter:是
 @ AbapCatalog.preserveKey:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:'ZZZJC_004Prior'
 定义视图ZZZJC_004Prior
 如
 从t000中选择虚拟
 {
       键" 1"作为GLAccount
     ,将键" S"作为供应商名称
     ,将''作为BA
     ,以''作为贸易伙伴
     ,以''作为客户名
    
     ,金额为11
    
 }
 哪里
 Dummy.mandt = $ session.client
 从t000作为Dummy进行联合选择{密钥'2'作为GLAccount,密钥''作为VendorName,密钥''作为BA,密钥'T'作为TradingPartner,密钥''作为CustomerName,22作为金额}其中Dummy.mandt = $ session  。客户
 联合从t000中选择作为Dummy {键'4'作为GLAccount,键'W'作为VendorName,键''作为BA,键''作为TradingPartner,键''作为CustomerName,33作为金额}其中Dummy.mandt = $ session  。客户
 从t000作为Dummy进行联合选择{键'5'作为GLAccount,键'X'作为VendorName,键''作为BA,键'Z'作为TradingPartner,键''作为CustomerName,44作为金额}其中Dummy.mandt = $ 会话客户端
 从t000作为Dummy进行联合选择{键'6'为GLAccount,键'U'为供应商名称,键''为BA,键'Y'为TradingPartner,键''为CustomerName,金额为55}其中Dummy.mandt = $ 会话客户端
 

CDS合并数据:

 @ AbapCatalog.sqlViewName:'ZZZJC_004C_V'
 @ AbapCatalog.compiler.compareFilter:是
 @ AbapCatalog.preserveKey:是
 @ AccessControl.authorizationCheck:#检查
 @ EndUserText.label:'ZZZJC_004Merge'
 定义视图ZZZJC_004Merge
 如
//内部联接
 从ZZZJC_004Current中选择当前
    
     内部加入ZZZJC_004Prior作为Prior
         在Current.GLAccount上= Prior.GLAccount
        和Current.VendorName = Prior.VendorName
        和Current.BA = Prior.BA
        和Current.TradingPartner = Prior.TradingPartner
        和Current.CustomerName = Prior.CustomerName

 {
       关键Current.GLAccount
     ,键Current.VendorName
     ,关键Current.BA
     ,关键Current.TradingPartner
     ,键Current.CustomerName
    
     ,Current.Amount作为CurrentAmount
     ,Prior.Amount作为PriorAmount

 }

 联盟

//左外连接
 从ZZZJC_004Current中选择当前
    
     左外部加入ZZZJC_004Prior作为Prior
         在Current.GLAccount上= Prior.GLAccount
        和Current.VendorName = Prior.VendorName
        和Current.BA = Prior.BA
        和Current.TradingPartner = Prior.TradingPartner
        和Current.CustomerName = Prior.CustomerName

 {
       关键Current.GLAccount
     ,键Current.VendorName
     ,关键Current.BA
     ,关键Current.TradingPartner
     ,键Current.CustomerName
    
     ,Current.Amount作为CurrentAmount
     ,0作为PriorAmount
 }
 哪里
     Prior.GLAccount为空
    
 联盟

//右外连接
 从ZZZJC_004Current中选择当前
    
     右外部加入ZZZJC_004Prior作为Prior
         在Current.GLAccount上= Prior.GLAccount
        和Current.VendorName = Prior.VendorName
        和Current.BA = Prior.BA
        和Current.TradingPartner = Prior.TradingPartner
        和Current.CustomerName = Prior.CustomerName

 {
       关键的Prior.GLAccount
     ,键Prior.VendorName
     ,密钥Prior.BA
     ,关键的Prior.TradingPartner
     ,键Prior.CustomerName
    
     ,0作为CurrentAmount
     ,Prior.Amount作为PriorAmount
 }
 哪里
     Current.GLAccount为空
 

一周热门 更多>