ORA-00920: недопустимый реляционный оператор при использовании агрегата внутри подзапроса - PullRequest
1 голос
/ 11 июля 2019

Я пишу простой запрос в Oracle,

SELECT CN.MyColumn1,
       SUM(CN.MyColumn2 - CN.MyColumn3 + CN.MyColumn4),
       (CASE 
          WHEN EXISTS (
             SELECT 't' 
             FROM Table1 CN2 
             WHERE CN2.MyColumn1  = CN.MyColumn1 
               AND CN2.MyColumn5= 0 
               AND (CN2.MyColumn2- CN2.MyColumn3+ CN2.MyColumn4) >= 
                SUM(CN.MyColumn2- CN.MyColumn3 + CN.MyColumn4) * 0.5)
            THEN 'Yes' 
          ELSE 'No' 
       END)
FROM Table1 CN 
GROUP BY CN.MyColumn1 
HAVING SUM (CN.MyColumn2- CN.MyColumn3 + CN.MyColumn4) < 6;

Но я получаю

Ошибка SQL [920] [42000]: ORA-00920: недопустимый реляционный оператор

1 Ответ

1 голос
/ 11 июля 2019

Проблема проистекает из

SUM агрегация используется в SUM(CN.MyColumn2- CN.MyColumn3 + CN.MyColumn4) * 0.5)

, который необходимо использовать в предложении HAVING. Вы можете попробовать использовать приведенный ниже:

SELECT CN.MyColumn1,
       SUM(CN.MyColumn2 - CN.MyColumn3 + CN.MyColumn4),
       (CASE 
          WHEN EXISTS (
             SELECT 't' 
             FROM Table1 CN2 
             WHERE CN2.MyColumn1  = CN.MyColumn1 
               AND CN2.MyColumn5= 0 
            HAVING (CN2.MyColumn2- CN2.MyColumn3+ CN2.MyColumn4) >= 
                SUM(CN.MyColumn2- CN.MyColumn3 + CN.MyColumn4) * 0.5)
          THEN 'Yes' 
          ELSE 'No' 
       END)
FROM Table1 CN 
GROUP BY CN.MyColumn1 
HAVING SUM (CN.MyColumn2- CN.MyColumn3 + CN.MyColumn4) < 6;

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...