zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

OracleSQL 实现 函数 技巧 记录 拼接 一起
2023-06-13 09:14:44 时间
需求
目前接触BI系统,由于业务系统的交易记录有很多,常常有些主管需要看到所有的记录情况,但是又不想滚动,想一眼就可以看到所有的,于是就想到了字符串拼接的形式。

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

为了不让SQL出错,又可以满足业务的需求,超过4000个字节的部分,使用“。。。”
实现SQL如下
复制代码代码如下:

CREATETABLETMP_PRODUCT
(PRODUCT_TYPEVARCHAR2(255),
PRODUCT_NAMEVARCHAR2(255));

insertintotmp_product
select"A","ProductA"||rownumfromdual
connectbylevel<100
unionall
select"B","ProductB"||rownumfromdual
connectbylevel<300
unionall
select"C","ProductC"||rownumfromdual
connectbylevel<400
unionall
select"D","ProductD"||rownumfromdual
connectbylevel<500
unionall
select"E","ProductE"||rownumfromdual
connectbylevel<600;
复制代码代码如下:

SELECTPRODUCT_TYPE,
WM_CONCAT(PRODUCT_NAME)||MAX(STR)ASPRODUCT_MULTI_NAME
FROM(SELECTPRODUCT_TYPE,
PRODUCT_NAME,
CASE
WHENALL_SUM>4000THEN
"..."
ELSE
NULL
ENDASSTR
FROM(SELECTPRODUCT_TYPE,
PRODUCT_NAME,
SUM(VSIZE(PRODUCT_NAME||","))OVER(PARTITIONBYPRODUCT_TYPE)ASALL_SUM,
SUM(VSIZE(PRODUCT_NAME||","))OVER(PARTITIONBYPRODUCT_TYPEORDERBYPRODUCT_NAME)ASUP_SUM
FROMTMP_PRODUCT)
WHERE(UP_SUM<=3998ANDALL_SUM>4000)
ORALL_SUM<=4001)
GROUPBYPRODUCT_TYPE