如何对两个SQL子查询的不同列求差值并解决Msg 116报错
错误原因
- 你的两个子查询都返回了
NextDate、统计值、状态共3个字段,当子查询作为外层SELECT的运算项时,只能返回单个值,多字段就会触发116号报错。 - 你误用了集合运算符
MINUS:该运算符是用来取两个结果集的行差集,不是用来做数值算术减法的,SQL Server中对应的集合差运算符是EXCEPT,也不适用于你的需求场景。
修复方案
方案1:条件聚合(推荐,仅单次扫表性能更高)
如果需要同时返回统计日期和差值,用该写法:
SELECT NextDate, COUNT(CASE WHEN DisposalState = 'Pending' THEN CaseNo END) - COUNT(CASE WHEN DisposalState = 'Disposed-off' THEN CaseNo END) AS TotalPend FROM dbo.Main_Cause_List WHERE NextDate = '2021-06-05' AND DisposalState IN ('Pending', 'Disposed-off') GROUP BY NextDate;
方案2:子查询返回单个值运算
如果仅需要返回差值,可修改你原有的子查询写法:
SELECT (SELECT COUNT(CaseNo) FROM dbo.Main_Cause_List WHERE NextDate = '2021-06-05' AND DisposalState = 'Pending') - (SELECT COUNT(CaseNo) FROM dbo.Main_Cause_List WHERE NextDate = '2021-06-05' AND DisposalState = 'Disposed-off') AS TotalPend;
内容的提问来源于stack exchange,提问作者Aamir17072
相关产品推荐
相关产品推荐

