复杂的HANASQL 多行并入一行

news2024/9/20 20:24:12

点击蓝字 关注我们

前言

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

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

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

详见链接

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

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

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

c57d2fa0b4349ab15b896faf558f110e.png

业务场景

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

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

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

11d66ff3c319e4a8237ea1d1bd837d0b.png

关于通用状态管理

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

通用状态管理的相关表:

  • JEST   单独对象状态

  • JSTO  状态对象信息

  • TJ30T 用户状态文本

  • TJ02T 系统状态文本

  • TJ20T 状态参数文件的文本

6045e630fdba575e1452d50f0af6e601.png

0db9f2b338505060daed5e456d12125c.png

生产订单状态视图

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

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

49a33045013e22b6fdf5e17cb582f2e0.png

3c76aaa38e5cfe923e1cbd43078930ce.png

期望的效果

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

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

1d85cb7ad2f8dfbac87083e9e9bd678c.png

c1ffe7ea90b81c17208ba7944ce3d1f5.png

实现方式

核心HANA SQL命令

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

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

CDS TABLE FUNCTION

367ba29cc9db8aa09f08f2748fecf615.png

AMDP类

d2ea88678a4f4769c9e54e665fb7aea9.png

4a406e48274a867cebd9e2025d16f434.png

CDS 视图

3da47a5ce606c009cea06630c7c1d536.png

实现过程

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

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

具体处理过程详见链接

无峰,公众号:ABAP 技巧与实战ABAP基础知识 怎么访问HANA数据库中的其它CATALOG的表

总结

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

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

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

THE

END

约定

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

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

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/674375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PromptBench:大型语言模型的对抗性基准测试

PromptBench是微软研究人员设计的一个用于测量大型语言模型(llm)对对抗性提示鲁棒性的基准测试。这个的工具是理解LLM的重要一步,随着这些模型在各种应用中越来越普遍,这个主题也变得越来越重要。 研究及其方法论 PromptBench采用多种对抗性文本攻击&am…

阿里云服务器的存储容量和性能如何?是否支持多种存储类型?

阿里云服务器的存储容量和性能如何?是否支持多种存储类型?   本文由阿里云代理商[聚搜云]撰写   阿里云服务器作为业界领先的云计算服务提供商,其存储容量和性能一直受到广泛关注。本文将为您介绍阿里云服务器的存储容量、性能以及支持的…

《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 12 Large-Scale Machine Learning

来源:《斯坦福数据挖掘教程第三版》对应的公开英文书和PPT Chapter 12 Large-Scale Machine Learning Algorithms called “machine learning” not only summarize our data; they are perceived as learning a model or classifier from the data, and thus dis…

Spring Boot 如何使用 @RequestParam 进行数据校验

Spring Boot 如何使用 RequestParam 进行数据校验 在 Web 应用程序中,用户提交的数据通常以请求参数的形式传递。在 Spring Boot 中,可以使用 RequestParam 注解来获取请求参数。但是,如何确保这些请求参数的有效性呢?在本文中&a…

Webots介绍

Webots介绍 1 介绍1.1 概述1.2 应用1.3 入门要求1.4 技术支持1.5 仿真步骤世界(webots定义)控制器超级控制器 1.6 平台能力三维建模能力物理引擎外设支持 2 软件使用启动webots用户界面文件菜单编辑菜单查看菜单模拟菜单构建菜单叠加菜单工具菜单帮助菜单…

ROS:文件系统以及命令

目录 一、ROS文件系统二、package.xml三、CMakelists.txt四、ROS文件系统命令4.1增4.2删4.3查4.4改4.5roscode4.6rosrun4.7roslaunch 一、ROS文件系统 ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构大致如下图所示: WorkSpace --- 自定义的…

在DailyMart中是如何支持多种登录方式的?

欢迎回来,我是飘渺。今天继续更新DDD&微服务的系列文章。 1. 理解DDD中的领域模型职责 在我们开始今天的主题之前,让我们先回答一些读者的疑问。 在上一篇文章 [[DailyMart05:通过用户注册呈现一个完整的DDD开发流程]] 发布以后&#xf…

团体程序设计天梯赛-练习集L1篇①

🚀欢迎来到本文🚀 🍉个人简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的普通人。 🏀个人主页:陈童学哦CSDN 💡所属专栏:PTA 🎁希望各…

SpringBoot多线程异步任务:ThreadPoolTaskExecutor + CompletableFuture

SpringBoot多线程异步任务 需求 在 SpringBoot 项目中,一个任务比较复杂,执行时间比较长,需要采用 多线程异步 的方式执行,从而缩短任务执行时间。 多线程异步 将任务拆分成多个独立的子任务,每个子任务在独立子线…

Linux基础服务2——NFS

文章目录 一、基本了解二、NFS工作机制2.1 示例 三、NFS配置文件3.1 指定客户端3.2 指定权限3.2.1 访问权限3.2.2 用户映射选项3.2.3 其他选项 四、测试案例4.1 安装nfs服务4.2 客户端查看nfs共享策略4.3 客户端挂载nfs共享目录4.3.1 手动挂载4.3.2 自动挂载4.3.3 exportfs重新…

字符数据的表示

目录 1、 英文字符与字符串的表示 2、中文字符 1、 英文字符与字符串的表示 英文字符:用ASCII码(128个字符)表示 每个英文字符的ASCII码为一个字节,其中低7位有效,最高位为0,该位可用于别的目的&#x…

云原生下一代-服务治理

服务治理 在这里插入图片描述 目录 什么是服务治理如何防止外部突发流量冲垮服务 限制请求的QPS和并发请求数按照调用方进行限流通过中间件访问限流和提前通知下线节点 如何处理服务超时和限流的问题 设置超时时间并对错误进行分类处理启用服务限流控制请求的流量 如何处理服…

【kubernetes】部署网络组件Calico与CoreDNS

前言:二进制部署kubernetes集群在企业应用中扮演着非常重要的角色。无论是集群升级,还是证书设置有效期都非常方便,也是从事云原生相关工作从入门到精通不得不迈过的坎。通过本系列文章,你将从虚拟机配置开始,到使用二进制方式从零到一搭建起安全稳定的高可用kubernetes集…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第三天

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

Web安全——DIV CSS基础

DIV CSS基础 一、DIV和CSS样式二、样式表类型2.1 嵌入样式表2.2 外部样式2.3 内联样式 三、注释四、样式选择器组合选择器 五、背景六、边框七、文字属性八、文本属性九、列表十、超链接十一、盒子模型十二、Border 边框margin padding 十三、float 脱离文档流浮动十四、块级元…

算法-双指针-秋招算法冲刺

秋招冲刺算法 双指针 数组划分,数组分块 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 快慢指针 基本思想:使用两个移动速度不同的指针在数组或链表等序列结构上移动。通常处理结构类型:环形链表或数组…

redis协议与异步方式学习笔记

目录 1 交互方式 pipline2 广播机制2.1 概念演示2.2 使用场景 3 redis事物3.1 概念3.2 使用场景3.3 解决的问题3.3.1 背景:多线程竞争出现问题3.3.2 事务3.3.3 安全性事务 3.4两种类型的“事务”3.4.1 watch ... multi exec3.4.2 lua 脚本实现“原子”执行&#xff…

2023-01-11 LightDB高可用常用操作-管理.md

LightDB-高可用常用操作-管理篇 安装环境 操作系统:centos7 服务器IP:1.192.168.121.112 (主)2.192.168.121.113 (从)3.192.168.121.114 (哨兵-可选) 主库重启操作 1.先停止备库的keepalived,在root用户下执行 # 1.获得备库keepalived进 程pid [rootlocalhost ~]#…

闪亮登场!在树莓派上点亮LED灯的简单详细方法

文章目录 树莓派开发与STM32开发的比较原理图以及树莓派引脚展示点灯步骤读取树莓派布局 树莓派开发与STM32开发的比较 树莓派和STM32都是常用的嵌入式设备,都可以使用GPIO来控制LED灯。它们的点灯方式和使用的编程语言以及开发环境略有不同: 相同点: 控…

第五节 Hacker 登录界面

登录框用户界面 1. Entry 输入框 Tkinter中的Entry组件是一个单行文本输入框,用于接收用户在GUI应用程序中输入的信息。它可以被设置为只读或可编辑状态,可以设置输入的文本格式及长度限制等。当用户输入完成后,可以通过调用Entry组件的get(…