复杂的HANASQL 多行并入一行

点击蓝字 关注我们

前言

基于HANA的内存数据库的强大性能, SAP建议把业务逻辑下沉到HANA中计算.以便减去应用服务器的负担,让程序性能更好一些.

SAP本身的一些复杂的业务逻辑比如MRP运算(MD01)也有了新的事务 MD01N (MRP LIVE)

报表类的数据分析程序尤其适用. 动态报表强化了这个方式

复杂的HANASQL系列,主要介绍在项目中一些复杂业务逻辑的SQL实现

本文主要介绍怎么用HANA SQL把多行记录转成一行记录

业务场景

标准生产订单的状态使用了SAP的通用状态管理(状态信息写入表JEST),

事务代码CO03的前台界面通过把状态码整合到一个字段,通过空格分割呈现.

能否在报表或其它自开发程序中也使用这种方式在一行中呈现生产订单的所有状态呢? 这就是本文讨论的话题.

关于通用状态管理

通用状态管理区分系统状态和用户状态,用户状态可通过配置添加,调整.

通用状态管理的相关表:

  • JEST   单独对象状态

  • JSTO  状态对象信息

  • TJ30T 用户状态文本

  • TJ02T 系统状态文本

  • TJ20T 状态参数文件的文本

生产订单状态视图

如下视图整合了生产订单系统状态和用户状态. 可以方便的查询,显示生产订单所有状态,其中有状态参数文件的是用户状态.

视图中包含了订单,状态内码,订单对象号,状态非激活标记,状态外码,状态描述,状态参数文件

期望的效果

期望在报表中通过关联一个视图,可以在一个特定字段中显示订单的所有状态,另一个字段则显示状态的描述.

如下图所示 订单状态显示了状态外部编码, 生产订单状态文本依次显示了状态的描述(依赖于登录语言)

实现方式

核心HANA SQL命令

string_agg 功能类似于 sum 功能的使用, 只不过sum 是把数字字段求和, 这个功能则是把文本字段联合. 

其中ZTPP1077C是一个限制需要呈现的状态的配置表.如果没有这个需求,可以去掉这个 inner join

CDS TABLE FUNCTION

AMDP类

CDS 视图

实现过程

String_agg 功能在新版的ABAP SQL 中也支持. 详见示例程序DEMO_STRING_AGG .

但CDS视图的SQL命令不支持该功能, 所以如果想通过视图固定该逻辑,需要在CDS中使用TABLE FUNCTION 通过AMDP访问HANA SQL

总结

STRING_AGG 可以根据分组字段把特定文本字段内容通过指定分割符号组合到一个字段中显示,在特定业务场景的使用将简化数据的呈现.

具体到SAP的通用状态管理中. 该方法可以很好的把对象的所有状态呈现出来, 以便于过滤及输出.

该字段的过滤只能使用通配符去过滤特定状态编码.

THE

END

约定

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

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

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

本文链接:https://my.lmcjl.com/post/1071.html

展开阅读全文

4 评论

留下您的评论.