Oracle 合并行数据,利用分析函数而非wm_concat()函数

一般合并行数据都使用 wm_concat() 函数,有最大的大小限制(最大是4000长度)

首先了解分析函数
  1. ,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
  2. 利用分析函数,例如这些,可以实现合并行的数据,并且效率高
使用分组函数进行合并行数据,效率高,而且长度不受限制(忘了从哪里学习来的了…)
  • 表结构如下
    在这里插入图片描述
-- SQL如下
SELECT VC_DEPT,TRANSLATE(LTRIM(TEXT,','),'*/','*\\\n') RESULT FROM(
SELECT ROW_NUMBER() OVER(PARTITION BY VC_DEPT ORDER BY VC_DEPT,LVL DESC) RN, VC_DEPT, TEXT FROM(
SELECT VC_DEPT, LEVEL LVL,SYS_CONNECT_BY_PATH(VC_NAME,',') TEXT FROM(
       SELECT VC_DEPT,VC_NAME, ROW_NUMBER() OVER(PARTITION BY VC_DEPT ORDER BY VC_NAME,VC_DEPT) X FROM AAA_TEST_DEPT
) A CONNECT BY VC_DEPT = PRIOR VC_DEPT AND X-1 = PRIOR X
)
) WHERE RN = 1 ORDER BY VC_DEPT
  • 查询结果如下
    在这里插入图片描述

其他分析函数的使用 例:

1. 使用 row_number() over(partition by … order by …) 分组排序

在这里插入图片描述
rank() over(partition by … order by …)
dense_rank() over(partition by … order by …)
row_number(),rank(), dense_rank() 的区别 链接

2. 使用COUNT() OVER(PARTITION BY … ORDER BY…)

在这里插入图片描述
count() over(partition by … order by …)
其他类似:
max() over(partition by … order by …)
min() over(partition by … order by …)
sum() over(partition by … order by …)
avg() over(partition by … order by …)

3. 使用first_value() over(partition by … order by …)在这里插入图片描述

first_value() over(partition by … order by …)
last_value() over(partition by … order by …)
first_value(),last_value()详解 链接

4.使用LAG() OVER(PARTITION BY … ORDER BY …) 分组排序

在这里插入图片描述
lag() over(partition by … order by …)
lead() over(partition by … order by …)
lag(),lead()详解 链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值