首页 > 其他分享 >一分多行列转换(Gbase版)

一分多行列转换(Gbase版)

时间:2024-07-30 15:56:04浏览次数:13  
标签:一分 BUSINESS FIELD1 ID 行列 PD NULL TYPE Gbase

1、源数据表结构

CREATE TABLE "sf_ref_pd_config" (
  "I_BATCH_NO" decimal(5,0) DEFAULT NULL COMMENT '批次ID',
  "V_ASSET_CLASS_NAME" varchar(200) DEFAULT NULL COMMENT '资产类型',
  "N_EXEC_ID" decimal(5,0) DEFAULT NULL COMMENT '执行排序',
  "N_PD_ID" decimal(10,0) DEFAULT NULL COMMENT 'PD_ID',
  "V_FIELD1_BUSINESS_TYPE" varchar(2000) DEFAULT NULL COMMENT '业务品种'
) ENGINE=EXPRESS REPLICATED  DEFAULT CHARSET=utf8 TABLESPACE='sys_tablespace' COMMENT='PD映射人工配置';

2、插入测试数据

INSERT INTO ifrs10.sf_ref_pd_config (I_BATCH_NO,V_ASSET_CLASS_NAME,N_EXEC_ID,N_PD_ID,V_FIELD1_BUSINESS_TYPE) VALUES 
(4,'信用卡',NULL,2,'1110160')
,(5,'零售信贷',NULL,2,'1110090,1110160,1110161,1110380')
,(5,'信用卡',NULL,3,'1110084,1110086,1110089,1110360')
,(4,'零售信贷',NULL,3,'1110030,1110084,1110086')
,(1,'信用卡',NULL,3,'1110071,1110082,1110087,1110088,1110100,1110110,1110120,1110140,1110370,1110410,1110755,1110760,1110765,1110940,1110950,1110050,1110055,1110090,1110161,1110380')
,(6,'零售信贷',NULL,1,'1110050')
,(6,'信用卡',NULL,3,'1110360')
,(1,'零售信贷',NULL,1,'1110050')
;

3、新建关联表并插入大于逗号分隔符中的数据

create table xx_sequence(id int);

-- 插入数据(列数要大于逗号分隔符中的数据)

insert into xx_sequence 
 select rowid from ex_ods_bond_credit;

4、行列转换查询

SELECT N_PD_ID,
       I_BATCH_NO,
       V_ASSET_CLASS_NAME,
       SUBSTRING_INDEX(SUBSTRING_INDEX(A.V_FIELD1_BUSINESS_TYPE,',',id+1),',',-1) col_new 
 FROM sf_ref_pd_config a 
 inner join xx_sequence tl 
 on t1.id < LENGTH(A.V_FIELD1_BUSINESS_TYPE)-LENGTH(REPLACE(A.V_FIELD1_BUSINESS_TYPE,',',''))+1;

5、后记

逗号分隔字符数据的又一种行列转换方式,脚本是源于Gbase数据库的,应该同样适用于Oracle。

附(原始SQL):
SELECT 
    I_BATCH_NO,V_ASSET_CLASS_NAME,N_PD_ID,SUBSTRING_INDEX(SUBSTRING_INDEX(A.V_FIELD1_BUSINESS_TYPE,',',id+1),',',-1) AS num 
FROM 
    (select I_BATCH_NO,V_ASSET_CLASS_NAME,N_PD_ID,V_FIELD1_BUSINESS_TYPE from sf_ref_pd_config  ) A join 
    t1  WHERE 
    t1.id < LENGTH(A.V_FIELD1_BUSINESS_TYPE)-LENGTH(REPLACE(A.V_FIELD1_BUSINESS_TYPE,',',''))+1 ;
及内网SQL图片:

关联文章:一分多行列转换(逗号分隔的一列数据转换成多行)-CSDN博客

一分多行列转换-CSDN博客

标签:一分,BUSINESS,FIELD1,ID,行列,PD,NULL,TYPE,Gbase
From: https://blog.csdn.net/BabyFish13/article/details/140798610

相关文章

  • GBase8c使用JDBC获取游标类型数据
    GBase8c使用JDBC获取游标类型数据JDBC游标GBase8c当JDBC遇到cursor时,如何处理?使用jdbc访问GBase8c数据库里的cursor游标数据,可以通过下面用例获取游标数据。一、创建自定义函数CREATEORREPLACEFUNCTIONget_users()RETURNSrefcursorAS$$DECLAREresult_c......
  • v-for 进行列表的 增删改查
    通过对象下标替换属性值但是通过实践此方法是错误的,Vue监听的是students这个对象,而不是这个对象里面的数组信息,也就是说,改变里面的值,并不能在页面上实现更新的功能<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content=......
  • KingbaseES数据库禁止某用户连接到数据库
    一、权限介绍KingbaseES数据库中的权限控制主要分为两个层次:实例级别和数据库级别。实例级别的权限由sys_hba.conf文件控制,而数据库级别的权限则由数据库内部的权限系统控制。对于数据库以及实例的权限控制,这两者权限控制可以理解为粗粒度,细粒度。实例级别权限:这主要通过sys_hba......
  • KingbaseES 等待事件之DataFileRead
    等待事件含义IO:DataFileRead等待事件发生在会话连接等待后端进程从存储中读取所需页面,原因是该页面在共享内存中不可用或无法找到。所有查询和数据操作(DML)操作都访问缓冲池中的页面,语句包括SELECT、UPDATE和DELETE等。例如,UPDATE可以从表或索引中读取页面。如果请求或更新的页......
  • KingbaseES 数据库WAL日志暴增问题处理
    故障现象:kingbase数据库容量不足100G,业务繁忙程度小,但是每天产生112283个WAL日志,每个日志16M,生成约1.7T的归档日志分析过程:思路一:从数据库日志入手,分析过程如下:sys_log日志:2024-06-0223:54:05.497CST3130361b580b0.7a47182242021-12-1212......
  • KingbaseES V8R6等待事件之 lwlock: CSNLogControlLock
    一、原理CSN日志是数据库中用于记录事务提交顺序和事务状态的重要日志,为了解决高并发场景下获取快照时的性能瓶颈,引入CSN机制。CSN机制通过为每个非只读事务分配一个XID(事务号),并在事务提交时推进CSN,同时保存CSN与XID的映射关系在CSNLog中。CSNLogControlLock等待事件通常表示某......
  • KingbaseES V8R6等待事件之 lock: transactionid
    等待事件含义Lock:在数据库管理系统中,锁是用来确保数据完整性和一致性的重要机制。当一个事务需要修改数据时,它会请求一个锁来防止其他事务同时修改相同的数据,从而导致数据不一致。transactionid:这通常是一个唯一标识符,用于区分和跟踪数据库中的不同事务。每个事务都有一个唯一的......
  • KingbaseES 更改 WAL 日志文件大小
    一、引言WAL日志的目的:WAL(Write-AheadLogging)是KingbaseES数据库中的一个关键特性,用于确保在数据库崩溃或故障后能够恢复数据。WAL日志记录了数据库的所有更改,这样即使数据库突然宕机,也可以从WAL文件中恢复数据到一致性状态。命令的功能:sys_resetwal命令用于重置WAL日志,它可以......
  • KingbaseES 数据库无响应问题分析
    一、背景及理论阐述某项目数据库系统是集群环境,主库业务卡顿,应用反馈部分业务无法正常进行。在操作系统中,物理内存(RAM)是有限的资源,当内存需求超过物理内存的容量时,操作系统会使用页面调度机制来管理内存资源。页面调度涉及将不常用的内存页面(Page)移到磁盘上的交换空间(SwapSpace......
  • KingbaseES 对象状态规则总结
    KingbaseES的PLSQL对象包括函数、存储过程、触发器、包、包体、对象类型、对象类型体和匿名块,其中匿名块即用即销,不具有状态属性,SQL中存在依赖的常见对象是表,视图,索引,自定义类型,自定义操作符等等。在使用编码过程会存在相互引用和被引用,就会导致对象的增删改无法“顺利”进行,本文......