当前位置: 首页 > news >正文

行列转换两例的思考

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 等命令来查看日志分析问题,往往分布式架构的一个异常都贯通多个节点&#xff…...

交替方向乘子

目录 一,交替方向乘子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关键字可用于变量声明,一旦该变量被设定,就不可以再改变该变量的值。通常&#xff0…...

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 容器与普通的容器非常像&#xf…...

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区别

问&#xff1a;ssh 与ping的区别 答&#xff1a;SSH&#xff08;Secure Shell&#xff09;和Ping是两种完全不同的网络工具。 SSH是一种加密的网络协议&#xff0c;用于安全地远程管理或访问远程计算机。它提供了一种安全的通信方式&#xff0c;可以在不安全的网络上进行远程登…...

iPhone手机怎么恢复出厂设置(详解)

如果您的iPhone遇到了手机卡顿、软件崩溃、内存不足或者忘记手机解锁密码等问题&#xff0c;恢复出厂设置似乎是万能的解决方法。 什么是恢复出厂设置&#xff1f;简单来说&#xff0c;就是让手机重新变成一张白纸&#xff0c;将手机所有数据都进行格式化&#xff0c;只保留原…...

灵活利用ChatAI,减轻工作任务—语言/翻译篇

前言 ChatAI在语言和翻译方面具有重要作用。它能够帮助用户进行多语言交流、纠正错误、学习新语言、了解不同文化背景&#xff0c;并提供文本翻译与校对等功能。通过与ChatAI互动&#xff0c;我们能够更好地利用技术来拓展自己在语言领域的能力和知识&#xff0c;实现更加无障…...

【肌电图信号分析】通道肌电图并查找收缩周期的数量、振幅、最大值和持续时间(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&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,则返…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...