Firebird数据库GROUP BY报错:字段未在聚合函数或GROUP BY子句中
问题解决:Firebird GROUP BY 错误修复
错误原因
Firebird遵循严格的SQL标准:SELECT子句中出现的非聚合字段必须全部包含在GROUP BY子句里。你的SQL里,BELEGART_AU、NETTO_AU等字段是基于BELEGART和NETTO的计算结果,既没加入GROUP BY,也没被聚合函数正确包裹,因此触发错误。
正确SQL写法
按照你按ONLINE分组、拆分BELEGART为AU/MS字段的需求,需要把每个CASE表达式用聚合函数包裹(用MAX提取BELEGART标识,用SUM汇总NETTO金额):
SELECT B.ONLINE ,MAX(CASE WHEN B.BELEGART = 'AU' THEN B.BELEGART END) AS BELEGART_AU ,SUM(CASE WHEN B.BELEGART = 'AU' THEN B.NETTO END) AS NETTO_AU ,MAX(CASE WHEN B.BELEGART = 'MS' THEN B.BELEGART END) AS BELEGART_MS ,SUM(CASE WHEN B.BELEGART = 'MS' THEN B.NETTO END) AS NETTO_MS FROM BELEG B WHERE B.BELEGART IN ('AU','MS') GROUP BY B.ONLINE
说明
MAX(CASE ...):每个ONLINE分组中,只要存在BELEGART='AU'的记录,就会返回'AU',否则返回NULL,满足拆分展示的需求。SUM(CASE ...):自动忽略NULL值,仅对符合条件的NETTO进行求和,实现按类型汇总金额。
内容的提问来源于stack exchange,提问作者stever
相关产品推荐
相关产品推荐

