您好我有这个查询我正在尝试执行并且我一直收到此错误"子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。",请帮助。
DECLARE @NUMCOUNT BIT
Select @NUMCOUNT = (SELECT
CASE WHEN
(SELECT COUNT(R5REQUISLINES.RQL_REQ)
WHERE R5REQUISLINES.RQL_STATUS IN ('A')
) IN
(SELECT COUNT(R5REQUISLINES.RQL_REQ)
WHERE R5REQUISLINES.RQL_STATUS IN ( 'A','C') ) THEN 1 else 0 END AS NUMCOUNT1
FROM R5REQUISLINES JOIN
R5REQUISITIONS ON R5REQUISLINES.RQL_REQ = R5REQUISITIONS.REQ_CODE
GROUP BY R5REQUISLINES.RQL_REQ, R5REQUISITIONS.REQ_CODE,R5REQUISLINES.RQL_STATUS
)
IF @NUMCOUNT = '1'
begin
UPDATE R5REQUISITIONS
SET R5REQUISITIONS.REQ_STATUS = 'CP'
end
答案 0 :(得分:0)
好吧,当R5REQUISITIONS
中没有RQL_STATUS = 'C'
时,听起来实际想要做的就是更新R5REQUISLINES
,因为你说你想要计算RQL_STATUS
为A的记录以及A或C的记录,然后在计数相同的情况下进行更新。您可以使用以下查询大大简化此任务:
UPDATE r5
SET r5.REQ_STATUS = 'CP'
FROM R5REQUISITIONS r5
WHERE NOT EXISTS (SELECT 1 FROM R5REQUISLINES r5q WHERE r5q.RQL_REQ = r5.REQ_CODE AND r5q.RQL_STATUS = 'C')
答案 1 :(得分:-1)
您的“SELECT CASE”返回的记录超过1条,因此无法分配给@NUMBER。修复子查询只返回您要查找的记录,或者修改它只返回1,并且具有'LIMIT 1'限定条件。
我不知道你的数据是什么样的,所以我不能告诉你为什么你的案例子查询会返回比你想象的更多的记录。
尝试运行它并查看它返回的内容,这可能会告诉你需要知道的问题:
SELECT
CASE WHEN
(SELECT COUNT(R5REQUISLINES.RQL_REQ)
WHERE R5REQUISLINES.RQL_STATUS IN ('A')
) IN
(SELECT COUNT(R5REQUISLINES.RQL_REQ)
WHERE R5REQUISLINES.RQL_STATUS IN ( 'A','C')
)
THEN 1
ELSE 0
END AS NUMCOUNT1
FROM R5REQUISLINES JOIN
R5REQUISITIONS ON R5REQUISLINES.RQL_REQ = R5REQUISITIONS.REQ_CODE
GROUP BY R5REQUISLINES.RQL_REQ, R5REQUISITIONS.REQ_CODE,R5REQUISLINES.RQL_STATUS
如果返回的行数超过1行,那就是问题所在。