问题解决之 左连接字段作为查询条件

点击蓝字 关注我们

问题描述

不知道你有没有创建过这样的报表. 在查询结果中,特定字段为空. 但是用该字段为空去查询, 却查不出记录.

  • 如图一,没有限制查询条件时,可以查询到数据

  • 如图二.通过ALV过滤能只显示地点为空的数据

  • 如图三.限制地点为空时, 用户期望能查询到图一红色框中的数据.

  • 如图四.实际查询不到任何数据.

fcf31e3870253bd6df639556fa58f756.png

图一

ee4f9f01afb800dd11710484262f8121.png

图二

052665e8a9916fb327d855f49649f22a.png

图三

d86dcaf210a5cfe2147ab169f429d129.png

图四

问题分析

上述问题产生的原因很简单,因为报表程序中使用了左连接(如图五),并且选择条件是左连接的表字段.

当左连接的右表中不存在的条目被查询出来的时候, 该字段的实际值是NULL. 因为ABAP变量的定义及显示对于NULL值都转换为初始值处理. 所以导致图一中的查询输出内容为空.

因为SQL语句本身支持NULL值,图二的选择条件无法被解释成 IS NULL . 所以添加选择条件为空时,无法查询到数据. 如果期望能查询到数据, SQL语句需要调整.

1f4e3278ad2a2a32aba3b03426543039.png

图五

问题解决

有两种方式可以解决这个问题:

  • 调整报表程序,动态设置 右表字段的查询条件

  • 使用CDS视图,调整输出的结果

01

调整查询条件

按下图的代码,调整查询条件, 判断左连接的选择条件内容,如果存在空值, 则解析为IS NULL. 否则使用标准的解析逻辑.如图六

96906cd50f4ea59500482c65316eb394.png

图六

动态报表中的NULL值支持

SPRING

动态报表(D-Query)中使用了一种类似的方式,支持了选择屏幕输入null 值

详见连接

无峰,公众号:ABAP 技巧与实战动态报表D-Query 添加NULL查询支持

动态报表简介

无峰,公众号:ABAP 技巧与实战动态报表D-Query简介

02

通过CDS视图

视图输出中时把NULL值调整成空值.查询语句调整为从视图读取数据.

68f3f4af6192c7485b91b587599a3101.png

fee79ba81201bd19990744fdbbb48ead.png

总结

左连接在查询中广泛应用,如果左连接的表字段参与了查询条件, 并且没有做特殊处理, 就会给业务人员带上困惑,用户会质疑报表的正确性. 

通过对报表查询方式的一点调整, 就能解决业务的这个困惑. 让报表的查询结果更符合业务预期.

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

8f699db5cbe985490598f6b5959950fd.png

公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 申请进入公众号讨论群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值