Что не так с этим SQL-запросом DB2? - PullRequest
0 голосов
/ 12 апреля 2011
SELECT
    getOrgName(BC.ManageOrgID),
    COUNT(CASE WHEN (EXISTS (SELECT FO.OBJECTNO FROM FLOW_OBJECT FO WHERE FO.ObjectNo=CR.SerialNo) AND NVL(CR.FinallyResult,'') IN ('01','02','03','04','05')) THEN BC.ManageOrgID ELSE NULL END) 
FROM
    BUSINESS_CONTRACT BC,
    CLASSIFY_RECORD CR
WHERE
 CR.ObjectType='BusinessContract'
AND CR.ObjectNo=BC.SerialNo
GROUP BY BC.ManageOrgID, CR.SerialNo, CR.FinallyResult

Я получаю сообщение об ошибке:

11: 01: 32 [SELECT - 0 строк, 0,000 с] [Код ошибки: -112, состояние SQL: 42607] Ошибка DB2 SQL: SQLCODE = -112, SQLSTATE = 42607, SQLERRMC = SYSIBM.COUNT ДРАЙВЕР = 3.57.82 ... выполнено 1 оператор (ы), затронуто 0 строк, время выполнения / выборки: 0,000 / 0,000 с [0 успешно, 0 предупреждений, 1 ошибка]

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

«Операнд имени функции столбца (в вашем случае count) включает функцию столбца, скалярную полную выборку или подзапрос». DB2 не позволяет этого. Подробнее см. Документацию по SQL112 .

Я не совсем уверен, как исправить ваш запрос, но, возможно, вы можете попробовать предложение HAVING после GROUP BY.

0 голосов
/ 21 апреля 2011

Вот один из способов переработать запрос:

SELECT
getOrgName( BC.ManageOrgID ),
COUNT( FO.ObjectNo ) AS objectcount
FROM BUSINESS_CONTRACT BC
INNER JOIN CLASSIFY_RECORD CR
    ON CR.ObjectNo = BC.SerialNo
    AND CR.ObjectType = 'BusinessContract'
    AND CR.FinallyResult IN ( '01','02','03','04','05' )
INNER JOIN FLOW_OBJECT FO
    ON FO.ObjectNo = CR.SerialNo
GROUP BY BC.ManageOrgID
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...