【发布时间】:2019-12-10 11:32:03
【问题描述】:
我想在 Oracle sql 中逐步聚合一个字符串列。
从此表中:
col_1 | col_2
-------------
1 | A
1 | B
1 | C
2 | C
2 | D
到:
col_1 | col_2
-------------
1 | A
1 | A,B
1 | A,B,C
2 | C
2 | C,D
我尝试了LISTAGG,但由于group by,它不会返回所有行。我的表中有大约 200 万行。
【问题讨论】:
-
如前所述,问题不是确定性的。你怎么知道,从输入,输出应该显示'A',然后是'A,B',然后是'A,B,C'?是什么让值为 'A' 的行成为
col_1 = 1的 first 行?或者你实际上有一个额外的列来定义你的行的顺序? -
另外,output 字符串的最大长度是否可以提前保证?如果没有,您将需要在输出中使用
CLOB- 例如,排除使用LISTAGG()(尽管您已经选择了“正确答案”)。 -
顺便说一句,
listagg()不适用于标签之一的oracle10g。例如没有listagg()的解决方案更通用。 -
@mathguy 这是一个很好的观点。有一个索引 col 定义了顺序。我可以提前找到输出字符串的最大长度。
-
@BarbarosÖzhan 这是一个错误。我在找 12。
标签: sql oracle oracle11g oracle12c