SQL - Case 表达式:如何在单个 WHEN 中使用多个条件

问题描述 投票:0回答:2

我想在一个 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: 不是单组组函数

我尝试用 () 分隔条件,但它不起作用。

那么根本原因是什么?我该如何解决? 谢谢你。

sql oracle oracle10g
2个回答
0
投票

你应该在 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 ()
,它会显示每个字段的聚合数据,然后你就可以在情况下使用它。


0
投票

一般来说,这完全取决于你想要得到什么结果。发布一段无效的代码(拼写错误、拼写错误...),没有任何示例数据、适用的规则以及所需的结果,对我们没有帮助。

我创建了自己的示例表,而您的代码(如您所知)不起作用:

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>
© www.soinside.com 2019 - 2024. All rights reserved.