当前位置: 首页 > 面试题库 >

LISTAGG查询“ RA-00937:不是单组功能”。

桂高义
2023-03-14
问题内容

我正在尝试使用逗号分隔值列表创建联接。例如:

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。我注意到了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);

问题答案:

我认为要使您的查询正常工作,您需要添加一个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;

或者,可能要在结果中包括其他属性:

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);


 类似资料:
  • 问题内容: 效果很好,但是当我在select中包含标题时,例如: 没有。为什么?如何使其运作? 问题答案: 如果那是您的意思,Rhys的答案是正确的,但是您可能想在()中使用,而该措辞建议了如何获得该答案: 为了减少重复,可以使用子句(如果使用的是最新版本的SQL): 我用来确认语法的示例。

  • 问题内容: 这是我正在尝试做的事情和获得的最简单的工作示例: 我有一个查询,如下所示: 注意: tran_party.team_id_redirect 是引用 team.team_id 的外键。 电流输出: 预期产量: 我希望列中的重复项仅被选择一次,如下所示: 我试过的 我写了一个内联视图,而不是直接从中选择,而是从tran_party中选择不同的值,如下所示: 尽管这确实给了我预期的输出,但是

  • 我已经用docker Compose启动了一个peer和membersrvc容器。他们已经成功地开始了。我从CLI部署example02 chaincode(也尝试了REST)。我得到一个成功的信息。当我试图查询chaincode时,我在查询chaincode时得到错误: 错误:未能启动chaincode规范(无法获取mycc-ledgererror-resourceNotfound的部署事务:l

  • 问题内容: 我刚刚在Oracle中遇到了一个奇怪的行为,我希望它会提高ORA-00918,但事实并非如此。以该查询为例。 此查询从概念上讲是在查找具有禁用触发器的表的详细信息,但是请注意,这不是我要解决的问题。这个问题不是该查询,数据字典,视图或表所独有的。据我所知,它适用于任何一组表或视图(我尝试过的两个或三个)。 无论如何,尝试运行此查询,你会得到ORA-00918,因为两者并有一个名为列,从

  • 我在sqlite查询结果的子查询中遇到问题。当执行下面的查询时,成功返回Sqlite数据库中的结果,但当运行程序时,它不返回任何值。我在下面的程序中做错了什么。请给我一些建议。 查询: java程序:

  • 问题内容: 好吧,我是SQL的新手,我刚刚读到,存储过程始终返回一个值,确定该过程中的查询是否已成功执行是一种很好的做法。 所以我有一个带有select语句的简单存储过程,如果要执行,我想返回1,否则返回-1。 您能告诉我如何用SQL编写该条件吗? 如果有关系,我的数据库是MS SQL Server。 谢谢你。 问题答案: 使用输出参数返回成功状态以及Try..Catch块