行列转换两例的思考
1、多行转成一列
(1)、建测试表及插入测试数据
create table t(i int,a varchar2(1));
insert into t(i,a)
select 1,'a' from dual
union all
select 1,'b' from dual
union all
select 1,'d' from dual
union all
select 1,'e' from dual
union all
select 2,'z' from dual
union all
select 2,'t' from dual
union all
select 2,'x' from dual
union all
select 3,'a' from dual;
commit;
(2)、实现多列转一行的自定义函数
create or replace function fn_coltorow(n number) return varchar2 istype typ_cursor is ref cursor;v_cursor typ_cursor;v_col_val varchar2(10);v_result varchar2(4000) := '';v_sql varchar2(200);
beginv_sql := 'select a from t where i = ' || n;open v_cursor for v_sql;loopfetch v_cursorinto v_col_val;exit when v_cursor%notfound;v_result := v_result || ',' || v_col_val;end loop;return substr(v_result, 2);
end;
(3)、运行自定义函数查看
select i,fn_coltorow(i) from t group by i;
(4)、使用系统函数查看(wmsys.wm_concat(a))
select i,wmsys.wm_concat(a) from t group by i;
总结:运行自定义函数与系统函数是一样的功效。
2、大连银行项目时的一个行列转换简化
select customerid,accountmonth,'0042',
max(decode(displayno,1,item2value,0)) 房地产经营收入,
max(decode(displayno,2,item2value,0)) 营业成本,
max(decode(displayno,3,item2value,0)) 销售费用,
max(decode(displayno,4,item2value,0)) 营业税金及附加,
max(decode(displayno,6,item2value,0)) 房地产经营利润,
max(decode(displayno,7,item2value,0)) 其它业务利润,
max(decode(displayno,8,item2value,0)) 管理费用,
max(decode(displayno,9,item2value,0)) 财务费用,
max(decode(displayno,11,item2value,0)) 经营利润,
max(decode(displayno,12,item2value,0)) 投资收益,
max(decode(displayno,13,item2value,0)) 期货收益,
max(decode(displayno,14,item2value,0)) 营业外收入,
max(decode(displayno,15,item2value,0)) 营业外支出,
max(decode(displayno,16,item2value,0)) 以前年度损益调整
from finance_data where reportno='0042' group by customerid,accountmonth;
总结:当初做的时候,又是用变量,又是用游标,花了一周时间,程序非常繁琐;现在看了下,一个查询语句一个小时不要就搞定;现在想想,那时候水平真是太次了。
3、对于分组有限的情况,也可以如下来实现:
1、建表及初始化数据语句
create table EDW_MAP_ASSET_STATUS
(SRC_NO VARCHAR2(4) not null,SRC_CODE_DESC VARCHAR2(100)
);insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '正常');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '已抵押/质押,未生效');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '已抵押/质押,已生效');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '其他机构抵押/质押');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '注销失效');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1005', '到期失效');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1006', '正常');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1006', '未生效');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1006', '抵押中');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1006', '注销');
insert into edw_map_asset_status (SRC_NO, SRC_CODE_DESC) values ('1006', '核销');
commit;
2、实现多行转为一行的SQL语句
select src_no,max(decode(group_rank, 1, '1、' || src_code_desc)) || ' ' ||max(decode(group_rank, 2, '2、' || src_code_desc)) || ' ' ||max(decode(group_rank, 3, '3、' || src_code_desc)) || ' ' ||max(decode(group_rank, 4, '4、' || src_code_desc)) || ' ' ||max(decode(group_rank, 5, '5、' || src_code_desc)) || ' ' ||max(decode(group_rank, 6, '6、' || src_code_desc)) || ' ' || ' 'from (select a.src_no,a.src_code_desc,row_number() over(partition by a.src_no order by a.src_no) group_rankfrom edw_map_asset_status a)group by src_no;select * from edw_map_asset_status;
3、说明:此方法对于分类情况有限的情形,如果分组情况不可控,则不能用此方法实现。
相关文章:
行列转换两例的思考
1、多行转成一列 (1)、建测试表及插入测试数据 create table t(i int,a varchar2(1)); insert into t(i,a) select 1,a from dual union all select 1,b from dual union all select 1,d from dual union all select 1,e from dual union all select 2,z from dual union all…...
高德地图 SDK 接口测试接入(AndroidTest 上手)
学习资料 官方文档 在 Android 平台上测试应用 | Android 开发者 | Android Developers 测试了解 【玩转Test】开篇-Android test 介绍 Android单元测试全解_android 单元测试_一代小强的博客-CSDN博客 Android单元测试-对Activity的测试_activitytestrule_许佳佳233的博客…...
省电模式稳定电压显示IC32×4 LCD显示驱动芯片
简述 VK1C21A是一个点阵式存储映射的LCD驱动器,可支持最大128点(32SEGx4COM) 的LCD屏,也支持2COM和3COM的LCD屏。单片机可通过3/4个通信脚配置显示参数和发 送显示数据,也可通过指令进入省电模式。具备高抗干扰&a…...
分布式架构的观测
分布式架构的观测 日志日志的输出收集与缓冲加工与聚合存储与查询 追踪数据收集 度量 在一个分布式应用中,如果出现了某个异常,那我们必然不可能只依靠 awk、grep 等命令来查看日志分析问题,往往分布式架构的一个异常都贯通多个节点ÿ…...
交替方向乘子
目录 一,交替方向乘子ADMM 1,带线性约束的分离优化模型 2,常见优化模型转带线性约束的分离优化模型 3,带线性约束的分离优化模型求解 4,交替方向乘子ADMM 本文部分内容来自教材 一,交替方向乘子ADMM …...
9-数据结构-栈(C语言版)
数据结构-栈(C语言版) 目录 数据结构-栈(C语言版) 1.栈的基础知识 1.入栈,出栈的排列组合 情景二:Catalan函数(计算不同出栈的总数) 2.栈的基本操作 1.顺序存储 (1)顺序栈-定义…...
C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序
1 分位数Quantile 分位数(Quantile),亦称分位点,是指将一个随机变量的概率分布范围分为几个等份的数值点,常用的有中位数(即二分位数)、四分位数、百分位数等。 2 常见各类分位数 2.1 二分位…...
实践分享:小程序事件系统设计
微信小程序官方文档中解释说:事件是用于子组件向父组件传递数据,可以传递任意数据。 小程序开发中的事件是指视图层到逻辑层的通讯方式,主要是可以将用户的行为反馈到逻辑层进行处理。事件可以绑定在组件上,当达到触发事件&#…...
无涯教程-Perl - bless函数
描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…...
Java关键字:final解析
目录 一、final变量 二、final方法 三、final类 final是Java语言中的一个关键字,凡是被final关键字修饰过的内容都是不可改变的。 一、final变量 final关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常࿰…...
LeetCode--HOT100题(25)
目录 题目描述:141. 环形链表(简单)题目接口解题思路代码 PS: 题目描述:141. 环形链表(简单) 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连…...
外卖项目,登录设计,nginx反向代理,MD5明文加密
.gitignore文件里的东西是进行排除,不用git进行管理。登录设计, controller 接收并封装参数调用service方法查询数据库封装结果并响应 登录成功后,生成jwt令牌 Service层 调用mapper查询数据库密码比对返回结果Mapper 编写sql语句为什么前端不…...
【云原生】kubernetes在Pod中init容器的作用和使用
目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器,在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像…...
springboot+vue分页
java项目 导包 <!--springboot整合pagehelper--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.3.1</version></dependency>前端 vue项目…...
【linux】ssh 和adb connect区别
问:ssh 与ping的区别 答:SSH(Secure Shell)和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议,用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式,可以在不安全的网络上进行远程登…...
iPhone手机怎么恢复出厂设置(详解)
如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题,恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置?简单来说,就是让手机重新变成一张白纸,将手机所有数据都进行格式化,只保留原…...
灵活利用ChatAI,减轻工作任务—语言/翻译篇
前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景,并提供文本翻译与校对等功能。通过与ChatAI互动,我们能够更好地利用技术来拓展自己在语言领域的能力和知识,实现更加无障…...
【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
python 定时器,如何进行周期性的函数运行、状态检查,百分比计算?
文章大纲 schedulescheschedule线程实现1实现2实现3协程(coroutine)参考文献schedule https://stackoverflow.com/questions/373335/how-do-i-get-a-cron-like-scheduler-in-python https://docs.python.org/3/library/sched.html sche schedule import schedule import ti…...
无涯教程-Perl - fcntl函数
描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…...
如何将企业微信 RPA 抽象为高可用的外部群自动化 API?
在做企业微信外部群(如跨群互动、自动化精准群发、批量建群)的自动化能力时,业界通常面临两种选型:一种是直接攻克底层协议,但面临极高的安全风控与多变协议的维护成本;另一种是基于 RPA(机器人…...
别再死记硬背占空比了!用STM32 HAL库驱动MG90S舵机,我总结了这份避坑指南
STM32 HAL库驱动MG90S舵机:从参数计算到实战调试的全方位指南 刚接触STM32和舵机的新手们,是否曾被PWM配置中的各种参数搞得晕头转向?明明按照教程设置了占空比,舵机却纹丝不动;或者角度总是偏差几度,调试…...
GD32F427以太网通信避坑指南:LAN8720的REF_CLK模式选择与SMI管理接口配置
GD32F427以太网通信避坑指南:LAN8720的REF_CLK模式选择与SMI管理接口配置 在嵌入式系统开发中,以太网通信的稳定性往往决定着整个产品的可靠性。GD32F427作为国产MCU的优秀代表,其内置的ENET控制器配合LAN8720 PHY芯片能够实现高效的网络通信…...
StarUML Java插件终极指南:高效实现UML与Java代码双向转换
StarUML Java插件终极指南:高效实现UML与Java代码双向转换 【免费下载链接】staruml-java Java extension for StarUML 项目地址: https://gitcode.com/gh_mirrors/st/staruml-java StarUML Java插件为Java开发者提供了强大的UML建模与代码生成能力ÿ…...
动手实验:在QEMU上模拟调试ATF安全启动全流程(含常见错误排查)
在QEMU虚拟环境中实战调试ATF安全启动全流程指南 1. 实验环境搭建与工具链配置 构建ATF调试环境需要精心准备工具链和依赖组件。我们推荐使用Ubuntu 20.04 LTS作为基础系统,这是目前对ARM虚拟化支持最完善的Linux发行版之一。以下是关键组件的版本要求: …...
如何无限期使用Cursor AI编程助手:完整免费方案指南
如何无限期使用Cursor AI编程助手:完整免费方案指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your trial…...
企业微信SCRM与客户管理系统推荐:2026年这12家值得关注
2026年,一个企业要选客户管理系统,第一个要回答的问题是:你的客户在哪里?如果答案是"微信",那企业微信SCRM就是最直接的路径——而在这个领域,微盛企微管家作为企业微信最大ISV,服务了…...
多角色对话配音方案:顶伯 一键生成有声剧,支持角色区分
多角色对话配音方案:顶伯 一键生成有声剧,支持角色区分在制作有声剧、播客或短视频时,多角色对话配音往往是最耗时的一环。传统方法需要为每个角色分别录制、剪辑、混音,不仅效率低下,还容易因音色不统一而影响沉浸感。…...
3个步骤:彻底释放华硕笔记本性能的终极指南
3个步骤:彻底释放华硕笔记本性能的终极指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Expertbook, …...
OpenHarmony 5.0.3兼容性认证实战:BQ3576HM开发板全栈移植与调优
1. 项目概述:一次关键的“兼容性认证”实战最近,我们团队基于贝启科技的BQ3576HM开发板套件,成功通过了OpenHarmony 5.0.3 Release版本的兼容性测评。这听起来像是一个简单的“通过测试”的新闻,但对于真正在一线做OpenHarmony设备…...
