我想在一个WHEN中使用多个条件,但它返回错误'not a single-group group group function'我使用Oracle SQL Developer
SELECT
CASE WHEN (TB2.BENE_CODE NOT LIKE '%ET%') AND (SUM(TB2.APPROVE_TOTAL)
> 0) THEN SUM(TB2.APPROVED_TOTAL)
ELSE 0 END AS Total_PayAmount
FROM clm_header_tr TB1
字符串
结果为ORA-00937:不是单组群函数
我试着用()分离条件,但它不起作用。
那么根本原因是什么呢?我该如何解决呢?谢谢。
3条答案
按热度按时间rqenqsqc1#
你应该在case周围求和(),而不是在case里面:
字符串
如果你想比较聚合数据和某些字段数据,那么你应该首先做一个使用分析变量的子查询:
sum() over ()
,它将显示每个字段的聚合数据,然后你可以在case中使用它。tyg4sfes2#
一般来说,这一切都取决于你想得到的结果。张贴一个无效的代码(错别字,错别字.)没有任何样本数据,应该适用于该规则和期望的结果并不能帮助我们帮助你。
我创建了自己的示例表,而您的代码-如您所知-不起作用:
字符串
如果你在一个
group by
子句中包含一个列,代码 * 工作 *,但是-这是你需要的吗?回到起点:样本数据,规则,期望的结果。型
iugsix8n3#
看看下面的代码:
字符串
1.贝内_CODE的总支付金额不像“%ET%”
型
1.包含“ET”和不包含“ET”的贝内_CODE的总支付金额
型
如果在选择列表中使用未聚合的列而未按该列对结果进行分组,则会出现ORA-00937:not a single-group group group function错误。
根据您想要获得的内容,有两个选择命令可以工作。
1st - select Sum(Case expression resulting value)-这是聚合列,因此您不需要group by -结果只有一行
第二-选择两个和-在选择列表中有Case表达式-在Group By子句中有相同的Case-结果有2行...
关于你关于Case表达式中的多个条件的问题-你可以像在其他任何地方一样使用它-下面是一个例子(与上面的第一个选项相同):
型