我正在尝试使用逗号分隔值列表创建连接.例如:
rule_id | attribute_id
----------------------
1 | a
1 | b
2 | c
2 | d
Run Code Online (Sandbox Code Playgroud)
应该:
rule_id | attribute_id
----------------------
1 | a,b
2 | c,d
Run Code Online (Sandbox Code Playgroud)
我试图这样做LISTAGG.但是,使用下面的代码,我得到了ORA-00937: not a single-group group function.我注意到FOR PATHsql-server 的语法,但它看起来不适用于我们的配置.这是我的查询:
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);
Run Code Online (Sandbox Code Playgroud)
Gor*_*off 10
我认为你的查询工作,你需要添加一个group by,更改order by.您还应该使用正确的显式连接语法:
SELECT r.rule_id as RULE_ID,
LISTAGG(a.ATTRIBUTE_ID, ', ') WITHIN GROUP (ORDER BY a.ATTRIBUTE_ID) as "ATTR_IDS"
FROM N_RULE r JOIN
N_ATTRIBUTE a
ON r.RULE_ID = a.RULE_ID
GROUP BY r.rule_id
ORDER BY r.rule_id;
Run Code Online (Sandbox Code Playgroud)
或者,您可能希望在结果中包含其他属性:
SELECT r.rule_id, r.AUDIENCE, UPPER(r.NAME)
LISTAGG(a.ATTRIBUTE_ID, ', ') WITHIN GROUP (ORDER BY a.ATTRIBUTE_ID) as "ATTR_IDS"
FROM N_RULE r JOIN
N_ATTRIBUTE a
ON r.RULE_ID = a.RULE_ID
GROUP BY r.rule_id, r.AUDIENCE, UPPER(r.NAME)
ORDER BY r.AUDIENCE, UPPER(r.NAME);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12305 次 |
| 最近记录: |