这个 DB2 SQL 查询有啥问题?
Posted
技术标签:
【中文标题】这个 DB2 SQL 查询有啥问题?【英文标题】:What's wrong with this DB2 SQL Query?这个 DB2 SQL 查询有什么问题? 【发布时间】:2011-04-12 03:07:18 【问题描述】: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 错误]
【问题讨论】:
【参考方案1】:“列函数名称的操作数(在您的情况下为 count)包括列函数、标量全查询或子查询。” DB2 不允许这样做。有关更多信息,请参阅SQL112 上的文档。
我不太确定如何修复您的查询,但也许您可以在 GROUP BY 之后尝试 HAVING 子句。
【讨论】:
【参考方案2】:这是重新处理查询的一种方法:
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
;
【讨论】:
以上是关于这个 DB2 SQL 查询有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章