赞
踩
在Oracle 11.2之前,我使用自定义聚合函数将列连接成一行. 11.2添加了LISTAGG功能,所以我尝试使用它.我的问题是我需要消除结果中的重复项,似乎无法做到这一点.这是一个例子.
CREATE TABLE ListAggTest AS (
SELECT rownum Num1, DECODE(rownum,1,'2',to_char(rownum)) Num2 FROM dual
CONNECT BY rownum<=6
);
SELECT * FROM ListAggTest;
NUM1 NUM2
---------- ---------------------
1 2
2 2 << Duplicate 2
3 3
4 4
5 5
6 6
我想看到的是:
NUM1 NUM2S
---------- --------------------
1 2-3-4-5-6
2 2-3-4-5-6
3 2-3-4-5-6
4 2-3-4-5-6
5 2-3-4-5-6
6 2-3-4-5-6
这是一个closeag的listagg版本,但不会消除重复.
SELECT Num1, listagg(Num2,'-') WITHIN GROUP (ORDER BY NULL) OVER () Num2s
FROM ListAggTest;
我有一个解决方案,但它比继续使用自定义聚合函数更糟糕.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。