【发布时间】:2014-08-06 20:14:04
【问题描述】:
我正在尝试使用逗号分隔值列表创建连接。例如:
rule_id | attribute_id
----------------------
1 | a
1 | b
2 | c
2 | d
应该是:
rule_id | attribute_id
----------------------
1 | a,b
2 | c,d
我正在尝试使用LISTAGG 这样做。但是,使用下面的代码,我得到了ORA-00937: not a single-group group function。我注意到 sql-server 的 FOR PATH 语法,但它看起来不适用于我们的配置。这是我的查询:
SELECT r.rule_id as RULE_ID,
LISTAGG(a.ATTRIBUTE_ID, ', ') WITHIN GROUP (ORDER BY a.ATTRIBUTE_ID) "ATTR_IDS"
FROM N_RULE r, N_ATTRIBUTE a
WHERE r.RULE_ID = a.RULE_ID
ORDER BY r.AUDIENCE, UPPER(r.NAME);
【问题讨论】:
-
添加
GROUP BY R.RULE_ID。为什么您要按未出现在所选列中的内容进行排序? -
@ben 这不是一个重复的问题,因为它在使用
listagg时询问错误。问题与使用该函数的partition子句有关 -
OP 正在尝试通过“规则”@aturegano 聚合“属性”。尽管该函数可以采用窗口子句,但这不是 OP 根据其样本数据和所需结果使用它的方式。他们也接受了同样的回答。
-
@ben 你是对的。很抱歉打扰您了。