Oracle使用存储过程实现多行对同行数据排列组合
Oracle使用存储过程实现同行数据排列组合
对多行的同一行的多列数据进行排列组合
假设获取的原来的数据如下表
| A | B | C | D |
|---|---|---|---|
| aa | ab | ac | ad |
现在我们需要对数据进行处理,将每一行的数据,类似于aa,ab,ac,ad,对这些列的值进行排列组合,输出类似于下面的结果
| main | main_1 |
|---|---|
| aa | ab |
| aa | ac |
| aa | ad |
| ab | ac |
| ab | ad |
| ac | ad |
不多BB,存储过程实现部分
create or replace procedure XXXXXXXXXX(WWW Integer) as
MAIN Varchar2(50);
ALT Varchar2(50);
cursor CAI is
select l.a, l.b, l.c, l.d, l.keyid, l.S
from UPL l, CO o
where o.O = l.S
and o.W = WWW;
begin
--展开游标,取每一行的数据
for AI in CAI loop
--判断条件:当一行存在一个以上的时候,才执行下面的操作
if AI.a is not null and
(AI.b is not null or AI.c is not null or AI.d is not null) then
--列转行并进行排列组合
for AA in (select sys_connect_by_path(it.IV, '#') CC
from (select *
from (select *
from (select l.a,
l.b,
l.c,
l.d,
l.keyid,
l.S
from UPL l, CO o
where o.O = l.S
and o.W = WWW) t unpivot(IV for verder_v in(a as 'a',
b as 'b',
c as 'c',
d as 'd'))) tt
where tt.k = AI.k
and tt.S = AI.S
order by tt.k asc) it
where level = 2
connect by prior verder_v < it.verder_v
and level <= 2) loop
--拆分成两部分
select substr(substr(AA.CC, 2, length(AA.CC)),
0,
instr(substr(AA.CC, 2, length(AA.CC)), '#') - 1),
substr(substr(AA.CC, 2, length(AA.CC)),
instr(substr(AA.CC, 2, length(AA.CC)), '#') + 1,
length(AA.CC))
into MAIN, ALT
from dual;
dbms_output.put_line(MAIN || ' 。' || ALT);
---然后将结果插入存储表中即可
end loop;
end if;
end loop;
end;
PS:如果不需要行转列的话,就可以用下面的,比较直观
select sys_connect_by_path(it.itemcode_v, '#') combo
from (select *
from (select rownum seq,t.itemcode from ttt20231025 t) tt
order by tt.seq asc) it
where level = 2
connect by prior seq < it.seq
and level <= 2
其中ttt20231025的数据为

执行后结果为

以上
Oracle使用存储过程实现多行对同行数据排列组合的更多相关文章
- 懵懂oracle之存储过程
作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...
- 懵懂oracle之存储过程3--JOB详解
在前面学习了存储过程的开发.调试之后,我们现在就需要来使用存储过程了.简单的使用,像上篇<懵懂oracle之存储过程2>中提到的存储过程调用,我们可以将写好的存储过程在另一个PL/SQL块 ...
- oracle的存储过程的作用
oracle的存储过程的作用 1.存储过程可以使得程序执行效率更高.安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性 ...
- Oracle多用户对一个表进行并发插入数据行操作
oracle数据库支持多用户间同时对同一个表进行操作,但是数据不一定同步,因为oracle数据库是支持脏数据的,比如A用户删除了表的数据但没有提交,B用户也能查询访问到,如果要避免这种情况只能加锁,A ...
- Oracle的存储过程基本写法
转: Oracle的存储过程基本写法 目录 1.1,Oracle存储过程简介: 1.2,创建存储过程的语法: 2.0,游标的使用.看到的一段解释很好的概念,如下: 回到顶部 1.1,Oracle存储过 ...
- 使用oracle的存储过程的例子
十几年没有用oracle的存储过程了,有些东西已经忘了,没有想到今天又要用.在这里写个例子.它演示了存储过程的格式,游标的使用,循环.判断的使用,还有直接执行一个拼接的SQL的用法.以下是代码: cr ...
- Oracle/PLSQL存储过程详解
原文链接:https://blog.csdn.net/zezezuiaiya/article/details/79557621 Oracle/PLSQL存储过程详解 2018-03-14 17:31: ...
- PB中用oracle的存储过程返回记录集做数据源来生成数据窗口,PB会找不到此存储过程及不能正常识别存储过程的参数问题(转)
(转)在PB中用oracle的存储过程返回记录集做数据源来生成数据窗口 首先oracle的存储过程写法与MSSQL不一样,差别比较大. 如果是返回数据集的存储过程则需要利用oracle的包来定义游标. ...
- Oracle一列的多行数据拼成一行显示字符
Oracle一列的多行数据拼成一行显示字符 oracle 提供了两个函数WMSYS.WM_CONCAT 和 ListAgg函数. www.2cto.com 先介绍:WMSYS.WM_CO ...
- java下实现调用oracle的存储过程和函数
在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...
随机推荐
- Nginx安装nginx-rtmp-module模块
简介 nginx中的模块虽然就是类似插件的概念,但是它无法像VsCode那样轻松的安装扩展. nginx要安装其它模块必须同时拿到nginx源代码和模块源代码,然后手动编译,将模块打到nginx中,最 ...
- favorite 单词学习 主要是发音 fa - vor - it 注意 ri不连读 是自然带出来的r的尾音
favorite 单词学习 主要注意发音 [ ˈfeɪ v(ə)r ɪt ] 主要是发音 fa - vor - it 注意 ri不连读 是自然带出来的r的尾音 favor : 来自拉丁语favere, ...
- 基于python的socket通信之阿里云socket端口不通的解决方案
问题描述: 使用python脚本进行socket业务流程,前几天还可以通信很好的,今天突然发现端口不通了.那就排查端口为啥不通了呢? 方案一:设置阿里云安全组 这个网上不少例子,笔者也按照这个操作过, ...
- 基于python的opus编解码实力解析
一 opus pyogg是一个非常不错的库,用这个做音频的编码和解码非常方便. 二 源码解析 import wave from pyogg import OpusEncoder from ...
- 一个简单的RTMP服务器实现 --- RTMP实现要点
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- NJOPT自控第三次积分赛--风力摆小结
NJOPT自控第三次积分赛--风力摆小结 题目 题目就不放了,百度一搜就有,就是2015国赛的风力摆.. 方案 我们队采用的主控是STM32F401CCU6(科协传统),性能完全够用:姿态传感器采用的 ...
- 学会Promise,看这里!!!
前言 众所周知,在JavaScript的世界中,代码都是单线程执行的.由于这个原因,JavaScript中的耗时操作,如网络操作.浏览器事件等,都需要异步执行.这也导致在JavaScript中异步操作 ...
- VR汽车虚拟仿真的实现、应用和未来
汽车虚拟仿真技术是一种利用计算机模拟汽车运行的技术,以实现对汽车行为的分析.评估和改进.汽车虚拟仿真技术是汽车工业中重要的开发设计和测试工具,可以大大缩短产品研发周期.降低研发成本和提高产品质量.本文 ...
- 瑞云与宜宾职院开展校企合作,同深圳VR联合会共建元宇宙产业学院
2022年7月9日,宜宾职业技术学院携手深圳市虚拟现实产业联合会和深圳市瑞云科技有限公司,合作共建的"元宇宙职业教育研究与应用中心"."元宇宙产业学院"授牌仪式 ...
- 记录--图解 Vue 响应式原理
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 最近部门分享,有同学提到了 Vue 响应式原理,大家在讨论时,发现一些同学对这一知识理解还不够深入,不能形成一个闭环,为了帮助大家理解这个 ...