我想在一个 WHEN 中使用多个条件,但它返回错误“不是单组组函数”我使用 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: 不是单组组函数
我尝试用 () 分隔条件,但它不起作用。
那么根本原因是什么?我该如何解决? 谢谢你。
你应该在 case 周围求和(),而不是在里面:
SELECT
SUM(CASE
WHEN (TB2.BENE_CODE NOT LIKE '%ET%') AND (TB2.APPROVE_TOTAL > 0)
THEN TB2.APPROVED_TOTAL
ELSE 0 END) AS Total_PayAmount
FROM clm_header_tr TB1
如果你想比较聚合数据和某些字段数据,那么你应该首先做一个使用分析变体的子查询:
sum() over ()
,它会显示每个字段的聚合数据,然后你就可以在情况下使用它。
一般来说,这完全取决于你想要得到什么结果。发布一段无效的代码(拼写错误、拼写错误...),没有任何示例数据、适用的规则以及所需的结果,对我们没有帮助。
我创建了自己的示例表,而您的代码(如您所知)不起作用:
SQL> SELECT
2 CASE WHEN (TB2.BENE_CODE NOT LIKE '%ET%') AND (SUM(TB2.APPROVED_TOTAL) > 0) THEN SUM(TB2.APPROVED_TOTAL)
3 ELSE 0
4 END AS Total_PayAmount
5 FROM clm_header_tr TB2;
CASE WHEN (TB2.BENE_CODE NOT LIKE '%ET%') AND (SUM(TB2.APPROVED_TOTAL) > 0) THEN SUM(TB2.APPROVED_TOTAL)
*
ERROR at line 2:
ORA-00937: not a single-group group function
如果您在
group by
子句中包含涉及的列,则代码 works,但是 - 这是您需要的吗?回到第一个:样本数据、规则、期望的结果。
SQL> SELECT
2 CASE WHEN (TB2.BENE_CODE NOT LIKE '%ET%') AND (SUM(TB2.APPROVED_TOTAL) > 0) THEN SUM(TB2.APPROVED_TOTAL)
3 ELSE 0
4 END AS Total_PayAmount
5 FROM clm_header_tr TB2
6 GROUP BY tb2.bene_code;
TOTAL_PAYAMOUNT
---------------
1300
5000
2450
SQL>