当前位置: 移动技术网 > IT编程>数据库>Oracle > oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起

oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼接在一起

2017年12月12日  | 移动技术网IT编程  | 我要评论

超神学院第二集,华夏会计网继续教育,蔡威泽

需求
目前接触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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网