复杂的HANASQL 列表转多行

news2024/11/18 13:34:04

前言

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

SAP本身的一些复杂的业务逻辑比如MRP运算(MD01)也有了新的事务 MD01N (MRP LIVE),性能得以巨大的提升

报表类的数据分析程序尤其适用此原则. 

动态报表强化了这个方式,详见链接

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

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

本文主要介绍怎么用SQL把列表转置成多条记录

8fbce71dd8c7a1f231fd155d227da6d1.png

开发方式

基于计算下沉到数据的原则, SAP给出了基于数据库层级的开发方式,其中比较常用两种方式(有时,这两种方式要结合起来使用)

  • CDS视图 

  • AMDP (ABAP Managed Database Procedures)

开发方式介绍详见链接

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

概念

列表转置成多条记录,

一些流行的数据库产品特别提供了函数做这个转换. 比如SQL SERVER 数据库中有PIVOT 和UNPIVOT 函数来处理这种转换.大家可以用关键字 PIVOT 查询,可以找到很多这样的文章.

比如下面的链接

https://blog.csdn.net/ycc9957/article/details/89335200

也可以参考文章理解行表列表的转换,详见链接

无峰,公众号:ABAP 技巧与实战ABAP基础知识 行表与列表的转换

示例

为了解释这个概念, 我门看一个的简单示例

比如表ZTTS_COL 有三个类似的字段,

COL001, COL002 ,COL003

e569e307cf4032767de9ffeaf79e521d.png

数据内容呈现为:

b8ffe52d933556257e4ad44e86c6a694.png

希望通过视图查询到如下记录, 在这个查询中, 一条记录的三个字段,转换成三条记录呈现.

d4b669f71f0554ad715adf005b856e41.png

实现方式一 CROSS JOIN

HANASQL实现

如下的HANA SQL语句可以实现上述转换. 其中

SERIES_GENERATE_INTEGER(1, 0, 3)

和MAP 函数是这个语句的核心. MAP 函数用于把特定字段的特定值隐射到另外的字段或值上面.

a642b07332ef78abf8186a07e35c4e3d.png

SERIES_GENERATE_INTEGER(X,Y,Z)

X :标识序列的累加值

Y :标识序列的开始值

Z :标识序列的最大值

输出的ELEMENT_NUMBER 标识序列的行号

为了更好的理解 

可以看这个SQL语句的结果.

d41669988d84341778558718cbb89a01.png

3def36c884b7b3a042d936580e189c29.png

58ec45b5d4f8d1dfe763473a505416c6.png

fd6a33942b2ddbc1c5f9ea3f87b9d48c.png

通过CDS视图结合 AMDP 使用HANA SQL

通过下面方式实现的CDS TABLE FUNCTION 无法用SE16N访问. 但是可以用程序访问 . 如果需要SE16N访问, 还需要创建一个通常的CDS视图从 ZCDS_TS_COL_LINE中读取数据.

CDS TABLE FUCNTION

afcc3e26982932b80b2bed60b904b673.png

AMDP 类 这个类只能在ECLIPSE中创建,修改.

a1962d7e55a619f1f651ec95049a1f79.png

实现方式二 UNION

 UNION语句同样可以实现列表转多行的.

但如果字段多的时候, UNION语句实现的SQL会非常复杂. 

并且从性能上理解 UNION 应该比 CROSS JOIN 方式性能差. 这个我没有测试过. 感兴趣的读者可以比较一下这两种方式的性能差异.

e6974eec846e2f9ebbd77ad78dd56c53.png

业务实践

KEPH表记录了销售订单的标准成本评估的统计结果(按成本组成统计到字段KSTNNN中. CKIS 记录了标准成本评估的明细,期望通过 CKIS-ukaln关联 KEPH-KALNR 获取下级物料的标准成本评估 .

KEPH是列表, 字段KSTNNN 表达了特定的成本组成的金额. (配置表TCKH3保存了二者的关系)

CKIS是行表 (ELEMT , WERTN 表达了成本组成 的金额 )

为了关联KEPH 和CKIS . 需要把KEPH 列表转多行.

转置前的内容

02172cb65cb08867873906c58e64ecc8.png

按上述方式转置后的输出

8f672e399bcd59d3ac6b903caecee716.png

总结

SAP HANA 没有提供列表转多行的标准函数UNPIVOT .基于项目中的需求, 

开始期望用UNION 实现, 后来发现SQL语句太大了. 担心后续维护问题, 才转用CROSS JOIN +SERIES_GENERATE_INTEGER实现.

在BING中搜索出这种实现方式.

详见链接

https://blogs.sap.com/2019/05/14/split-table-column-value-into-multiple-rows-using-sql-in-sap-hana/

与链接

https://blogs.sap.com/2019/04/21/how-to-pivotunpivot-in-sap-hana/

其中关键字UNPIVOT是询问CHATGPT 获取的.

后续有时间尝试一下多行转列的方式(PIVOT).

THE

END

约定

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

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

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

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

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

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

相关文章

淘宝监控竞品sku数据接口

电商竞品数据监控查询可以通过以下几个步骤实现: 确定需要监控的竞品:首先需要明确自己店铺的产品定位和竞争对手,选择需要监控的竞品。 选择监控工具:根据需求和预算选择适合自己的电商竞品数据监控工具,例如谷歌分析…

nvm管理node的多版本,任意安装,切换不同nodejs版本

1.nvm安装包下载: https://github.com/coreybutler/nvm-windows/releases window操作系统选择安装包直接安装: 如果已经在使用的nodejs无需卸载,安装过程中会提示是否需要管理已经安装的版本,选择“是”。 2.安装完成之后&…

云计算——云计算部署形成及应用

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 一.云计算部署形式 1.私有云 (1)私有云优点 &#x…

计划

img { margin: auto; display: block } 优化器的作用是什么?例举一下神经网络中常用的优化器? 优化器作用:求出让损失函数最小化的参数。 常用优化器: 1、Adam 关联所有样本的梯度,便于求解全局最优解,始终…

有公网IP,如何设置端口映射实现访问?

很多中小型公司或个人会根据自身需求自建服务器,或者将自己内网的服务、应用发布到外网,实现异地访问,如远程桌面、网站、数据库、公司的管理系统、FTP、管家婆、监控系统等等。 没接触过的人可能会觉得这个很难,实际上使用快解析…

国内镜像+JDK下载地址+IDEA专业安装版和免安装版下载地址

一、OracleJDK下载地址 JDK版本Oracle JDK新增特性官网原版下载地址JDK 1.0-已下线JDK 1.1-已下线JDK 1.2-已下线JDK 1.3-已下线JDK 1.4-已下线JDK 5.0自动装箱、泛型、枚举、增强的for循环、注解等已下线JDK 6JDBC 4.0、Pluggable Annotation Processing API、JAX-WS、StAX等…

Redis底层学习(六)—存储类型-ZSet篇

这里写目录标题 结构特点具体服务器操作命令底层结构应用场景 结构特点 适⽤场景:存储不重复且有序需求的数据,⽐如:学⽣的⾼考成绩。 它的内部采⽤“ 跳跃列表 ”实现,根据score进⾏排序 具体服务器操作命令 添加元素到zset中…

RedditVideoMakerBot 视频制作机器人自动生成视频搭建教程

https://github.com/elebumm/RedditVideoMakerBot搭建教程 RedditVideoMakerBot视频制作机器人 有些在抖音、快手上的视频获得了数百万的观看次数,你仔细分析他们的视频,他们唯一做的原创事情收集材料、然后拼接在一起。尤其是一些新闻类的视频&#xff…

深度学习-RepVGGNet

文章目录 前言一、RepVgg简介二、为什么训练时采用多分支结构三、为什么推理时使用单分支结构四、结构重参数化1、融合Conv2d和BN 前言 看yolonas代码,发现有QARepVgg网络,完全不懂,所以来补课,先看了RepVGG 这篇文章主要来自于霹…

模六十计数器(三)

文章目录 前言一、代码模板二、Verilog程序1、顶层模块2、计数模块3、显示模块 三、Testbench程序四、仿真波形五、实测结果总结 前言 又隔了将近一年,学习明德扬编程规范,重新编写模六十计数器程序,使其符合规范,并采用模板化与…

阿秀去面腾讯了(社招两年面试经验)

作者:阿秀 校招八股文学习网站:https://interviewguide.cn 小伙伴们大家好,我是阿秀。 前段时间说了自己换工作的事:阿秀离职了,虽然最后选择去了外企,但在换工作期间也看了不少机会,基本国内的…

独立开发变现周刊(第89期):一个 AI 小工具,两个月内赚7.3万美元

分享独立开发、产品变现相关内容,每周五发布。 目录 1、privateGPT: 可以和本地文档进行交互的聊天机器人2、chatbutler: 无代码可视化创建聊天机器人3、CommaFeed:可以自托管RSS阅读器开源项目4、roop: 一键深度换脸5、deeplearning: 吴恩达在推特上宣布…

搜索帮助demo:F4IF_INT_TABLE_VALUE_REQUEST 返回多列值

货铺QQ群号:834508274微信群不能扫码进了,可以加我微信SAPliumeng拉进群,申请时请提供您哪个模块顾问,否则是一律不通过的。进群统一修改群名片,例如BJ_ABAP_森林木。群内禁止发广告及其他一切无关链接,小程…

零基础开发小程序第三课-列表功能开发

最近我新研究了一款无代码开发工具,主打的是一行代码都不写来开发小程序。已经有了两篇文章 利用无代码工具开发一款小程序 公民开发者学习无代码编程,从CRUD开始 前两篇文章已经介绍了如何创建项目,如何建立数据表,以及开发新…

智哪儿×广州光亚展专栏:对话8家AIoT及芯片方案企业,解读其核心竞争优势及成熟项目案例,参展亮点提前看

2023年6月9-12日,第二十八届广州国际照明展览会(光亚展,GILE2023)将在广州中国进出口商品交易会展馆正式启幕。本届展会以“「光」未来”为主题,将迎来3,318家来自18个国际及地区的参展企业,展示规模将横跨…

【MCS-51单片机汇编语言】期末复习总结②——汇编程序设计(题型二)

文章目录 顺序结构分支结构CJNE的使用规则 循环结构包含部分分类 常考题型例题1题目描述题解 例题2题目描述题解 例题3题目描述题解 顺序结构 程序默认以顺序结构执行; 分支结构 用CJNE进行分支; CJNE的使用规则 CJNE A, #data rel 若(A) (data)&a…

高完整性系统工程(九):Invariants

目录 1. INVARIANTS 1.1 例子 1.2 正式的证明 1. INVARIANTS 一个不变式需要满足以下三个属性: 当循环开始时,不变式是正确的在每一次循环迭代之后,不变式仍然是正确的当循环条件为假时,不变式能推出循环结束后的条件&#x…

刘知远团队提出:如何通过扩大高质量指导性对话数据集,来提高模型的性能和效率...

深度学习自然语言处理 原创作者 | 刘嘉玲 随着开源语言大模型(LLM)的百花齐放,模型的性能和效率关乎到产品的成本和服务体验的均衡。那么,有没有办法让语言大模型变得更高效、更优秀呢? 为了进一步提高开源模型的上限,清华大学的研…

数据库新闻速递 明白3中主流的数据迁移方法 (译)

头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共8…

Webstorm 支持微信小程序开发插件 Wechat mini program support

支持微信小程序插件安装: Wechat mini program support, 微信小程序语法支持,rpx 单位报错解决。 插件官方文档 Wiki - Gitee.com 安装方法: File-> Settings->Plugins 选择Marketplace: 输入Wechat ,搜索,然…