Oracle SQL报not a single-group group function错误求助
问题根源
- 报错是因为SQL中使用了两层嵌套的
XMLAgg聚合函数,当前仅按vm.value单层分组无法满足嵌套聚合的分组要求:- 内层
XMLAgg用于生成每个分组(GRUP)下的CLAUSE节点,需要先按vm.value+c.description_group分组聚合 - 外层
XMLAgg用于生成每个分类(CLASIFICATION)下的GRUP节点,需要基于内层聚合结果再按vm.value分组
- 内层
修复后的SQL代码
SELECT XMLELEMENT( "CLASIFICATION", XMLATTRIBUTES(t.value As "name"), XMLAgg( XMLElement( "GRUP", XMLATTRIBUTES(t.description_group As "name"), t.clause_xml ) ) ) FROM ( -- 内层先按分类、分组维度聚合生成CLAUSE节点 SELECT vm.value, c.description_group, XMLAgg( XMLElement( "CLAUSE", XMLATTRIBUTES(cla.description_clause As "name") ) ) AS clause_xml FROM dbo.clause cla, dbo.clause_group c, dbo.values vm WHERE vm.table_name = 'CLAUSE_TYPES' AND c.code = vm.code AND cla.id_group = c.id_group GROUP BY vm.value, c.description_group ) t GROUP BY t.value
验证说明
- 分层聚合后,每层
XMLAgg对应的非聚合列都已经加入了对应层级的GROUP BY子句,符合Oracle分组聚合的语法规则,不会再触发not a single-group group function报错。 - 生成的XML结构和原始需求完全一致,不会改变输出结果格式。
内容的提问来源于stack exchange,提问作者Xavier
相关产品推荐
相关产品推荐

