错误的结果从HANA DB上的CDS离开外部联接

2020-09-29 17:28发布

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

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


系统:

SAP ERP 6.0/EHP7 for SAP ERP 6.0

SAP NETWEAVER 7.4

HANA DB版本1.00.122.05.1481577062

软件组件版本支持软件包的补丁程序级别

SAP内核7.45 64位UNICODE SP310 000310

目前,我正面临一个特殊的问题。 我在 service.sap.com 上进行搜索,发现了类似的问题,但都与非HANA- 数据库。

问题。

我已经建立了一个CDS,并在MARA和MSEG之间建立了连接。 联接是LEFT OUTER JOIN。

但是,结果似乎是一个INNER JOIN:左表MARA具有条目,而右表MSEG没有条目。 结果是CDS没有返回记录。

定义视图Zcds_Artikel_Omzet
 带有参数p_date:abap.dats

 作为精选的不同mara.matnr,mara.mtart,mara.mstae,mara.mstde,mara.lvorm,mara.attyp,mara.satnr,
     case mseg.bwart当'251'然后''else'X'以verwerken结尾时

 来自mara as mara
                   
 左外连接mseg作为mara.matnr = mseg.matnr上的mseg
 mseg.mblnr = mkpf.mblnr上的左外部连接mkpf和
                         mseg.mjahr = mkpf.mjahr

 其中mkpf.bldat> = $ parameters.p_date
 

对于某些材料(没有MSEG记录),无论是否添加DISTINCT,都不会返回结果。 我至少希望MARA提供的细节像通常的左外连接会提供的那样。

我什至尝试替换

其中mkpf.bldat> = $ parameters.p_date 

其中mseg.budat_mkpf> = $ parameters.p_date 

但是结果保持不变:找不到记录。

在要返回的字段列表中包含BSEG字段也导致找到0条记录。

我已经在纯ABAP中重建了选择,但是即使在这里也没有记录返回。

还有其他人遇到过同样的问题吗? 如果是这样,您是如何解决的?

此致

Guus

 

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

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


系统:

SAP ERP 6.0/EHP7 for SAP ERP 6.0

SAP NETWEAVER 7.4

HANA DB版本1.00.122.05.1481577062

软件组件版本支持软件包的补丁程序级别

SAP内核7.45 64位UNICODE SP310 000310

目前,我正面临一个特殊的问题。 我在 service.sap.com 上进行搜索,发现了类似的问题,但都与非HANA- 数据库。

问题。

我已经建立了一个CDS,并在MARA和MSEG之间建立了连接。 联接是LEFT OUTER JOIN。

但是,结果似乎是一个INNER JOIN:左表MARA具有条目,而右表MSEG没有条目。 结果是CDS没有返回记录。

定义视图Zcds_Artikel_Omzet
 带有参数p_date:abap.dats

 作为精选的不同mara.matnr,mara.mtart,mara.mstae,mara.mstde,mara.lvorm,mara.attyp,mara.satnr,
     case mseg.bwart当'251'然后''else'X'以verwerken结尾时

 来自mara as mara
                   
 左外连接mseg作为mara.matnr = mseg.matnr上的mseg
 mseg.mblnr = mkpf.mblnr上的左外部连接mkpf和
                         mseg.mjahr = mkpf.mjahr

 其中mkpf.bldat> = $ parameters.p_date
 

对于某些材料(没有MSEG记录),无论是否添加DISTINCT,都不会返回结果。 我至少希望MARA提供的细节像通常的左外连接会提供的那样。

我什至尝试替换

其中mkpf.bldat> = $ parameters.p_date 

其中mseg.budat_mkpf> = $ parameters.p_date 

但是结果保持不变:找不到记录。

在要返回的字段列表中包含BSEG字段也导致找到0条记录。

我已经在纯ABAP中重建了选择,但是即使在这里也没有记录返回。

还有其他人遇到过同样的问题吗? 如果是这样,您是如何解决的?

此致

Guus

 
付费偷看设置
发送
7条回答
哎,真难
1楼 · 2020-09-29 18:29.采纳回答

我假设WHERE子句删除了这些默认记录,您可以使用

 mkpf.bldat> = $ parameters.p_date或mkpf.bldat IS NULL来更改where子句

您还可以在mara.matnr = mseg.matnr和mseg.budat_mkpf> = $ parameters.p_date

问候 ,
Raymond

哎,真难
2楼-- · 2020-09-29 18:06

好点。 开启条件确实取决于平台。

CJones
3楼-- · 2020-09-29 18:30

如果我没看错,您的比较字段mseg〜budat_mkpf的类型为date。 因此,您的比较检查可能会针对日期的HANA特定空值而工作,并且" is null"不适合。

请参阅此处的详细信息:

https://help.sap.com/saphelp_hanaplatform/ helpdata/en/20/a1569875191014b507cf392724b7eb/content.htm

空日期('000-00-00')是SAP HANA中的特殊值。 即使空日期看起来像NULL或未知值,它的行为也不像一个,也不像一个。

关于安德烈亚斯


大道至简
4楼-- · 2020-09-29 18:07

没问题!

槿木_熙
5楼-- · 2020-09-29 18:08

运行存在示例。 如果它按照描述的那样运行,我想这可能是您的数据/期望不正确。 否则,...

小c菟菟
6楼-- · 2020-09-29 18:31

@Horst不幸的是,我使用的是ABAP 7.4。 您的示例无法激活。 不过,我对左外部联接的期望并不正确。 我在MARA中有特定的材料,但是在MSEG中没有该材料的记录(已通过SE16N检查)。 据我所知,左外部联接仍应返回结果。

@Raymond扩展为IS NULL不会影响结果。 但是,扩展左外部联接似乎有效。 但是,为什么我却躲不开。

无论如何,谢谢您的回复!

致谢

Guus

Cikesha
7楼-- · 2020-09-29 18:26

您好,Horst,我确实在7.4上找到了该示例,并且按预期工作。

但是我仍在尝试弄清楚为什么我原来的LEFT OUTER没有给我想要的结果:确实,我想要MSEG部分为NULL值。 而且我仍然不明白为什么扩展ON会给我想要的结果而不是WHERE版本。

我已经检查了两个表中的数据,它应该可以正常工作。 但是很显然,我对左外层的工作方式缺乏了解。

参数:pa_matnr类型为matnr,
               pa_Date类型sydatum默认sy-datum。


   选择mara〜matnr,mseg〜mblnr到表@data(lt_mseg)
     来自mara作为mara左外部加入mseg作为mara〜matnr上的mseg = mseg〜matnr
       其中mara〜matnr eq @pa_matnr和
             mseg〜budat_mkpf ge @pa_date。

   选择mara〜matnr,mseg〜mblnr到表@data(lt_mseg2)
     来自mara作为mara左外部加入mseg作为mara〜matnr = mseg〜matnr上的mseg
                                                       mseg〜budat_mkpf> = @pa_date
       其中mara〜matnr eq @pa_matnr。
 

第一个选择失败,第二个成功。 但为什么? 也许有人可以对此有所了解,以便我理解。 总是比简单地认为理所当然更好。

问候

Guus

一周热门 更多>