时间:2021-05-24
需求:
目前接触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
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
这篇文章主要介绍了oracle实现多行合并的方法,实例讲述了oracle10g以后提供的函数WMSYS.WM_CONCAT的使用技巧,需要的朋友可以参考下本文实
很多场合我们都会用到oracle的列合并,oracle提供了如下一些方法用来实现列合并:一、Oracle10G以前使用WMSYS.WM_CONCAT:wmsys
concat与其说是连接,更准确的说是拼接。就是把两个表直接合在一起。于是有一个突出的问题,是横向拼接还是纵向拼接,所以concat函数的关键参数是axis。函
OPPO手机怎么拼接长图片?当我们在进行照片截图时,截了很多的长图片,那如何将这些长图片拼接在一起呢,怎么拼接长图,下面就和小编一起来看看吧!手机中的【相册】应
作用: GROUP_CONCAT函数可以拼接某个字段值成字符串,默认的分隔符是逗号,即",", 如果需要自定义分隔符可以使用SEPARATOR 如:SEL