oracle列转行拼成一个字符串,oracle行转列/列转行/字符串拆分 测试

5268f80b9b1e01f982625ef6fac83ca1.png

--列转行

--示例1

select * from (

select o.sname, count(1) dataNum

from t_Olm_Onlinemondata d

join t_Aaa_ou o on o.ou_id = d.company_id

where d.mon_time > to_date(‘2019-11-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘)

group by o.sname

) pivot( sum(dataNum) for sname in(‘石家庄炼化‘,‘燕山石化‘,‘安庆石化‘,‘天津石化‘,‘河南油田‘,‘湖北化肥‘,‘扬子石化‘,‘金陵石化‘,‘茂名石化‘ ))

--示例2

create table demo(id int,name varchar(20),nums int);  ---- 创建表

insert into demo values(1, ‘苹果‘, 1000);

insert into demo values(2, ‘苹果‘, 2000);

insert into demo values(3, ‘苹果‘, 4000);

insert into demo values(4, ‘橘子‘, 5000);

insert into demo values(5, ‘橘子‘, 3000);

insert into demo values(6, ‘葡萄‘, 3500);

insert into demo values(7, ‘芒果‘, 4200);

insert into demo values(8, ‘芒果‘, 5500);

select *

from (select name, sum(nums) nums from demo t group by t.name)

pivot(sum(nums)

for name in(‘苹果‘, ‘橘子‘, ‘葡萄‘, ‘芒果‘))

--行转列

create table Fruit(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int);

insert into Fruit values(1,‘苹果‘,1000,2000,3300,5000);

insert into Fruit values(2,‘橘子‘,3000,3000,3200,1500);

insert into Fruit values(3,‘香蕉‘,2500,3500,2200,2500);

insert into Fruit values(4,‘葡萄‘,1500,2500,1200,3500);

select * from Fruit;

select * from Fruit unpivot(

xiaoshou --行转列  列别名 新列名

for jidu --行转列  给转换的列起的 列别名

in(Q1, Q2, Q3, Q4)

)

--下面的语句执行错误 行转列 pivot和列转行unpivot的in只能使用静态字符串(http://www.oracle-developer.net/display.php?id=506)

with b as(

select listagg(o.sname,‘,‘) within group(order by o.ou_id) sname from T_AAA_ou o where o.parent_id is null and o.enabled =1 and o.type=1

)

select * from (

select o.sname, count(1) dataNum

from t_Olm_Onlinemondata d

join t_Aaa_ou o on o.ou_id = d.company_id

where d.mon_time > to_date(‘2019-11-01 00:00:00‘, ‘yyyy-mm-dd hh24:mi:ss‘)

group by o.sname

) pivot( sum(dataNum) for sname in( b  ));

--字符串拼接 listagg within group (order by o.ou_id)

select listagg(o.sname, ‘,‘) within group(order by o.ou_id) sname

from T_AAA_ou o

where 1=1

and o.parent_id is null

and o.enabled = 1

and o.type = 1

group by o.parent_id;

--字符串拆分

drop table Fruit;

create table Fruit(id int,name varchar(50), Q1 int, Q2 int, Q3 int, Q4 int);

insert into Fruit values(1,‘苹果,香瓜,哈密瓜,梨‘,1000,2000,3300,5000);

insert into Fruit values(2,‘橘子,葡萄,荔枝,榴莲‘,3000,3000,3200,1500);

insert into Fruit values(3,‘香蕉,雪莲果,山竹,樱桃‘,2500,3500,2200,2500);

insert into Fruit values(4,‘葡萄,芒果,沙棘,无花果‘,1500,2500,1200,3500);

select* from Fruit

select

(select max( regexp_substr(Fruit.Name,‘[^,]+‘,1,level,‘i‘)) from dual connect by level <= length(Fruit.Name)-length(regexp_replace(‘,‘,‘‘)))names

from Fruit

select t.name from Fruit t inner join a on a.name = t.name;

--获取字符串长度

select LENGTH(‘17,20,23‘) from dual;

--获取没有逗号的字符串长度

select LENGTH(REGEXP_REPLACE(‘17,20,23‘, ‘,‘, ‘‘)) from dual;

SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=7;

SELECT NVL(REGEXP_SUBSTR(‘17,20,23‘, ‘[^,]+‘, 1, LEVEL, ‘i‘), ‘NULLL‘) AS STR

FROM DUAL

CONNECT BY LEVEL<= LENGTH(‘17,20,23‘) - LENGTH(REGEXP_REPLACE(‘17,20,23‘, ‘,‘, ‘‘))+1;

-- 字符串拆分  参考网址 http://blog.sina.com.cn/s/blog_679e928c0102wij3.html

--listagg(字段,‘,‘) within group(order by 分组字段)

oracle行转列/列转行/字符串拆分 测试

标签:val   取字符串   varchar   inner   字符串拆分   sel   ace   isp   agg

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/liuqiang18/p/13025404.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle中,我们可以使用触发器(trigger)来拼接字符串拼接一列的值。 1. 拼接字符串: 我们可以使用触发器在插入或更新表中的某一行之前或之后,将需要拼接字符串添加到指定的列中。比如,我们可以在插入一条记录之前,使用触发器将指定的字符串拼接到该记录中的某一列中。 在触发器代码中,我们可以使用Oracle提供的字符串拼接函数CONCAT或者'||'符号来实现字符串拼接操作。例如,如果我们有一个名为mytable的表,其中包含两列name和age,我们可以在插入一行记录之前使用触发器将字符串"Hello, "拼接到name列中的值上。 触发器示例代码: CREATE OR REPLACE TRIGGER trg_mytable_before_insert BEFORE INSERT ON mytable FOR EACH ROW BEGIN :NEW.name := CONCAT('Hello, ', :NEW.name); -- 或者使用 :NEW.name := :NEW.name || 'Hello, '; END; 2. 拼接一列的值: 类似地,我们可以使用触发器拼接某一列的值。这通常会在更新某一行记录时使用。比如,我们可以在更新一条记录之前,使用触发器将某一列的旧值和新值拼接在一起。 在触发器代码中,我们可以使用Oracle提供的字符串拼接函数CONCAT或者'||'符号来实现字符串拼接操作。例如,如果我们要在更新mytable表中的某一行记录时,在age列中的值之后添加一个字符串"-updated",可以使用以下触发器。 触发器示例代码: CREATE OR REPLACE TRIGGER trg_mytable_before_update BEFORE UPDATE ON mytable FOR EACH ROW BEGIN :NEW.age := CONCAT(:NEW.age, '-updated'); -- 或者使用 :NEW.age := :NEW.age || '-updated'; END; 以上是使用Oracle触发器拼接字符串拼接一列值的方法。通过在触发器中使用CONCAT函数或'||'符号,我们可以方便地进行字符串拼接操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值