复杂的 HANASQL 多行并入一行

作者:ABAP技巧与实战 约 6 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Basis, Data Engineering, PP, SD, 开发, 数据工程, 生产, 系统管理, 销售分销

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

**点击蓝字** 关注我们

前言

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

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

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

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ 动态报表D-Query简介

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247486429&idx=1&sn=8cbab08040255baa4c7495e6e106230d&chksm=cf5dd6ebf82a5ffdf6cd2cca5ef3b3a298dcb7e3aac2b4cae5073af9c6720bf57b5544c57a49&scene=21#wechat_redirect)

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

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

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

业务场景

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

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

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

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

关于通用状态管理

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

通用状态管理的相关表

• JEST 单独对象状态

• JSTO 状态对象信息

• TJ30T 用户状态文本

• TJ02T 系统状态文本

• TJ20T 状态参数文件的文本

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

生产订单状态视图

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

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

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

期望的效果

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

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

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

实现方式

核心HANA SQL命令

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

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

CDS TABLE FUNCTION

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

AMDP类

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

CDS 视图

复杂的 HANASQL 多行并入一行 - 封面图
复杂的 HANASQL 多行并入一行 - 封面图

实现过程

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

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

> 具体处理过程详见链接 无峰,公众号:ABAP 技巧与实战 [ ABAP基础知识 怎么访问HANA数据库中的其它CATALOG的表

> ](http://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247487740&idx=1&sn=06f69f335cdab7004e9db430d1d44f35&chksm=cf5dcdcaf82a44dcae6d181c2116b2c1f287c5126e176e3a1826183847933f091ca39f651749#rd)

总结

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

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

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

** THE **

** END **

**约定**

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

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

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

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「复杂的HANASQL多行并入一行.md」整理生成,仅用于内部技术分享与学习交流。