oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起
超神学院第二集,华夏会计网继续教育,蔡威泽
需求:
目前接触bi系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。
解决方案:使用oracle自带的函数 wmsys.wm_concat,进行拼接。
函数限制:它的输出不能超过4000个字节。
为了不让sql出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。”
实现sql如下:
create table tmp_product
(product_type varchar2(255),
product_name varchar2(255));
insert into tmp_product
select 'a','producta'||rownum from dual
connect by level < 100
union all
select 'b','productb'||rownum from dual
connect by level < 300
union all
select 'c','productc'||rownum from dual
connect by level < 400
union all
select 'd','productd'||rownum from dual
connect by level < 500
union all
select 'e','producte'||rownum from dual
connect by level < 600;
select product_type,
wm_concat(product_name) || max(str) as product_multi_name
from (select product_type,
product_name,
case
when all_sum > 4000 then
'...'
else
null
end as str
from (select product_type,
product_name,
sum(vsize(product_name || ',')) over(partition by product_type) as all_sum,
sum(vsize(product_name || ',')) over(partition by product_type order by product_name) as up_sum
from tmp_product)
where (up_sum <= 3998 and all_sum > 4000)
or all_sum <= 4001)
group by product_type
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!!
点击进行留言回复
相关文章:
-
-
-
快速向表插入大量数据
当需要对一个非常大的表INSERT的时候,会消耗非常多的资源,因为update表的时候,oracle需要生成 redo log和undo log;此时最...
[阅读全文]
-
-
-
Oracle入门学习五
学习视频: https://www.bilibili.com/video/BV1tJ411r7EC?p=55 数据的完整性:保证插入表格的数据必须正确。...
[阅读全文]
-
Oracle入门学习六
事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就...
[阅读全文]
-
-
-
Oracle入门学习一
oracle的安装,用户授权,表格操作,数据类型,ddl表格,dml数据。 下一篇:Oracle入门学习二 学习视频:https://www.bilib...
[阅读全文]
-
Oracle入门学习二
上一篇:Oracle入门学习一 学习视频:https://www.bilibili.com/video/BV1tJ411r7EC?p=15 算术运算符:...
[阅读全文]
网友评论