美文网首页简友广场SAP
问题解决之 左连接字段作为查询条件

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

作者: syjf1976_abap | 来源:发表于2021-09-24 13:57 被阅读0次

    点击蓝字 关注我们

    问题描述

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

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

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

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

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

    图一

    图二

    图三

    图四

    问题分析

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

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

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

    图五

    问题解决

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

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

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

    01

    调整查询条件

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

    图六

    动态报表中的NULL值支持

    SPRING

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

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

    02

    通过CDS视图

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

    总结

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

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

    THE

    END


    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/ibuwgltx.html