ORA-00934:添加大小写时,此处不允许使用组功能

时间:2017-10-11 17:13:38

标签: sql oracle group-by case-when

我有一段运行良好的代码。但是,当我在"时引入"在select子句中的语句,我得到"组函数不允许在这里"错误,我无法解决它(该问题与我的代码中的最后一个按功能分组)

任何想法为什么(不要被代码推迟,它是3个连接在一起,显然问题是由最后的Group By语句引起的)?

谢谢!

SELECT 
  Trans_Table.MTAGRE01_NO
  , (case when Cash. MTAGRE01_NO = Trans_Table. MTAGRE01_NO
     then (SUM(Trans_Table.MTTRANS01_VALUENCU)*-1)
     else   SUM(Trans_Table.MTTRANS01_VALUENCU) END)        AS MTTRANS01_VALUENCU

FROM MTTRANS01 Trans_Table
INNER JOIN  RUTRANTYPE01 Trans_Type
ON  Trans_Type.RUTRANTYPE01_CODE  = Trans_Table.RUTRANTYPE01_CODE

LEFT JOIN(
SELECT 
  MTAGRE01_NO
 ,CASE WHEN SRAGRESTAT01_CODE = 'COLL' THEN MTAGRE01_AGRESTATDATE END AS Date_Fr
 from MTAGRE01
 where CASE WHEN SRAGRESTAT01_CODE = 'COLL' THEN MTAGRE01_AGRESTATDATE END  is not null
) F_Date 
ON  F_Date.MTAGRE01_NO = Trans_Table.MTAGRE01_NO

LEFT JOIN(
SELECT
      Trans_Table.MTAGRE01_NO
FROM MTTRANS01 Trans_Table
INNER JOIN  RUTRANTYPE01 Trans_Type  ON  Trans_Type.RUTRANTYPE01_CODE  = Trans_Table.RUTRANTYPE01_CODE
GROUP BY
  Trans_Table.MTAGRE01_NO, Trans_Type.RUTRANTYPE01_CODE, Trans_Type.RUTRANTYPE01_DESCRIPTION
) Cash
ON Cash.MTAGRE01_NO = Trans_Table.MTAGRE01_NO

where Trans_Type.SRPROCTYPE01_CODE in ('C','D') 
and Trans_Table.MTTRANS01_VALUEDATE >=  F_Date.Date_Fr

GROUP BY
  Trans_Table.MTAGRE01_NO
, (case when Cash. MTAGRE01_NO = Trans_Table. MTAGRE01_NO
        then (SUM(Trans_Table.MTTRANS01_VALUENCU)*-1)
        else   SUM(Trans_Table.MTTRANS01_VALUENCU) END);

1 个答案:

答案 0 :(得分:0)

我相信它在案件陈述中的总和上挂了。 2条路线来纠正我可以看到的,可能还有很多:

这有点hacky,但它会起作用并快速给出结果。改变你的情况:

SELECT 
Trans_Table.MTAGRE01_NO
, (case when Cash. MTAGRE01_NO = Trans_Table. MTAGRE01_NO
 then ((Trans_Table.MTTRANS01_VALUENCU)*-1)
 else   (Trans_Table.MTTRANS01_VALUENCU) END)        AS MTTRANS01_VALUENCU

从组中删除案例。

现在将整个查询称为子查询

Select MTAGRE01_NO, sum(MTTRANS01_VALUENCU)
(your entire query)a

你的另一个选项需要更多的工作......在你的首字母声明中:

MTTRANS01 Trans_Table

将其更改为连接到trans表并返回

的子查询
case when Cash. MTAGRE01_NO = Trans_Table. MTAGRE01_NO
 then ((Trans_Table.MTTRANS01_VALUENCU)*-1)
 else   (Trans_Table.MTTRANS01_VALUENCU) END as MTAGRE01_NO

Then join to that subquery and do a simple sum in your main query.

希望一切都有意义,如果您需要澄清,请提出问题