• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论

由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况;又不想滚动;接下来介绍使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接,感兴趣的朋友可以了解下

需求
目前接触BI系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。

解决方案:使用Oracle自带的函数 WMSYS.WM_CONCAT,进行拼接。
函数限制:它的输出不能超过4000个字节。

为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分本文来源gaodai#ma#com搞@@代~&码网,使用“。。。”
实现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 4000)
OR ALL_SUM <= 4001)
GROUP BY PRODUCT_TYPE


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:oracle—SQL技巧之(二)WMSYS.WM_CONCAT函数实现多行记录用逗号拼
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址