一般合并行数据都使用 wm_concat() 函数,有最大的大小限制(最大是4000长度)
首先了解分析函数
- ,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。
- 利用分析函数,例如这些,可以实现合并行的数据,并且效率高
使用分组函数进行合并行数据,效率高,而且长度不受限制(忘了从哪里学习来的了…)
- 表结构如下
-- 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()详解 链接