首页 > 数据库 >Oracle行列操作--合并行与按字段拆分

Oracle行列操作--合并行与按字段拆分

时间:2023-08-23 18:44:05浏览次数:61  
标签:insert RYMC -- into XXK values 拆分 Oracle

1、在实际工作中遇到根据某一字段将多行合并成一行的情况,我们下面以选修课的例子进行说明:

-- create table
create table XXK
(
  id    NUMBER,
  rymc  NVARCHAR2(50),
  xxkmc NVARCHAR2(50)
)
---insert test data
insert into XXK values(1,'小明','编程');
insert into XXK values(2,'小明','绘画');
insert into XXK values(3,'小明','音乐');
insert into XXK values(4,'小红','绘画');
insert into XXK values(5,'小红','音乐');

image

如果我们要实现将所有的人员显示为一行,选修的不同可成通过逗号连接呢(下图效果)?

image

这个可以使用Oracle的LISTAGG函数,其具体语法如下

LISTAGG(column, delimiter) WITHIN GROUP (ORDER BY column)

其中:

column为需要合并的列的名称

delimiter为分割符号

那么实现的语句我们可以写成:

SELECT T.RYMC, LISTAGG(TO_CHAR(T.XXKMC), ',') WITHIN GROUP(ORDER BY XXKMC) AS XXKLIST
  FROM XXK t
 GROUP BY T.RYMC

特别注意:

我在具体使用过程中,有时候往往写的语句没有问题,就是不返回结果或者返回结果有乱码等情况,这是因为字段的数据类型导致的,进行一下转换即可,就如上面的SQL,其通过TO_CHAR(T.XXKMC)对选修课名称进行了类型转换。

2、如果我要实现相反的效果呢?先制作测试数据。

-- create table
create table XXK2
(
  id    NUMBER,
  rymc  NVARCHAR2(50),
  xxkmc NVARCHAR2(50)
)
---insert test data
insert into XXK2 values(1,'小明','编程,绘画,音乐');
insert into XXK2 values(2,'小红','绘画,音乐');

这里可以使用regexp_substr函数来实现:

regexp_substr(str, pattern [, position [, occurrence [, match_param]]])

其中:

str是需要进行处理的字符串列

pattern是正则表达式

position其实位置,从第几个字符开始匹配

occurrence获取第几个分割出来的组

match_param模式,i不区分大小写,c为区分大小写,默认是c

具体语句如下:

SELECT T.RYMC, REGEXP_SUBSTR(T.XXKMC, '[^,]+', 1, Level) AS XXK_CF
  FROM XXK2 T
CONNECT BY Level<= REGEXP_COUNT (T.XXKMC, ',' ) +1  and t.RYMC = prior t.RYMC  and prior dbms_random.value is not null

注意:

在本例中,level并不是固定不变的,要根据实际选修的课程数来确定,其中REGEXP_COUNT就是来做这个工作的。

需要通过人员进行限定同时处理空的情况t.RYMC = prior t.RYMC  and prior dbms_random.value is not null,否则会出现错乱的情况,如下所示:

image


标签:insert,RYMC,--,into,XXK,values,拆分,Oracle
From: https://www.cnblogs.com/Jingkunliu/p/17652513.html

相关文章

  • 突破成本困局:B站FinOps经验与案例分享
    云成本优化(FinOps)一词,变得越来越流行。在GoogleTrends上,“FinOps”关键字的搜索量在2019年到2023年的四年间增长了410倍。在国外,有18000多人把FinOps技能列在了自己的LinkedIn简历里。CNCF发布的云原生2023年趋势预测报告中,10个热点趋势中有4个与FinOps相关,分别是FinOps、GreenOps......
  • 一加ACE2 PRO打破现象 再造爆款
    打破现象级的方式,就是再造一个爆款!一加Ace2Pro首批20万备货,3分钟全部售罄!下次开售时间,8月26日本周六10:00评论 (0)评论暂无更多......
  • 与gpt关于路由问答
    问:if(store.getters.roles.length===0){//判断当前用户是否已拉取完user_info信息store.dispatch("GetInfo").then(()=>{store.dispatch("GenerateRoutes").then((accessRoutes)=>{......
  • smartbi token回调获取登录凭证漏洞
    2023年7月28日Smartbi官方修复了一处权限绕过漏洞。未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。于是研究了下相关补丁并进行分析。0x01分析结果依据补丁分析,得到如下漏洞复现步骤第一步,设置EngineAddress为攻击者机器上的http服务地址首先使用pythonflask......
  • 【IOTE】物联网射频模组和芯片级方案提供商——深圳信驰达科技将精彩亮相IOTE物联网展
    ►►►强势来袭StrongAttack主物联场,相约深圳;2023,共论商机!IOTE2023第二十届国际物联网展·深圳站将于2023年9月20-22日在深圳国际会展中心(宝安新馆)开展!汇聚全球超800+家参展企业,呈现更多数字化纷呈。届时,深圳市信驰达科技将携其特色产品和优秀解决方案亮相展会现场,与大家共襄盛......
  • 震惊!友达台中厂长传过劳逝世 | 百能云芯
    8月23日消息,近日面板大厂友达风波不断,8月3日有消息称,生产笔电的5代厂与电视的6代厂已经半年没有订单了,面板产业很惨,预计裁员100至200人。今天接到消息称,任职才1年的台中友达6A厂厂长,传因持续高压,上周六死亡。脸书《匿名靠北友达》涌入不少同仁惋惜留言,怀念这位有肩膀担当的厂长,其......
  • 代驾系统:革新出行体验的智能伙伴
    在现代社会,出行方式正在经历着一场革命,而代驾系统正是这场革命中的一位智能伙伴。通过结合智能科技和出行需求,代驾系统为我们带来了便捷、安全、个性化的出行体验。本文将介绍代驾系统的工作原理,并通过Python代码演示其基本功能。代驾系统背后的智能代驾系统的核心在于智能科技的应......
  • 朋友圈发圈文案防折叠不折叠转换流量主小程序开发
    朋友圈发圈文案防折叠不折叠转换流量主小程序开发不折叠:转发此条动态,帮我解锁朋友圈新技能,让你的朋友圈精彩!折叠转不折叠:转发此动态,即可开启朋友圈折叠转不折叠的功能,让你的朋友圈变得更加多彩!流量主功能列表:在朋友圈发布广告、赚取流量主收益,让你的好文赚!赚取流量主收益:开启流量主......
  • 台湾高技双城展会启幕,上海工业博览会-苏州工业智造展
    1.展会名称:第23届中国国际工业博览会展会日期:9月19-23日展会地址:国家会展中心(上海)展位号:5.1馆-D1002.展会名称:苏州国际工业智造展展会日期:9月25-27日展会地址:苏州国际博览中心展位号:C1-E02台湾高技将展示智能制造较新技术及全套解决方案。2023年9月19-23日,第23届中国国际工业......
  • SIT1040Q 5V 供电,±40V 接口耐压,1Mbps 高速 CAN 总线收发器
    SIT1040Q是一款应用于CAN协议控制器和物理总线之间的接口芯片,可应用于卡车、公交、小汽车、工业控制等领域,速率可达到1Mbps,具有在总线与CAN协议控制器之间进行差分信号传输的能力。完全兼容“ISO11898”标准;符合AEC-Q100要求;内置过温保护;过流保护功能;显性超时......