我正在创建一个包含 WHERE CASE WHEN
语句的 SQL 查询。我做错事并出错。
我的SQL语句就像
DECLARE @AreaId INT = 2
DECLARE @Areas Table(AreaId int)
INSERT INTO @Areas SELECT AreaId
FROM AreaMaster
WHERE CityZoneId IN (SELECT CityZoneId FROM AreaMaster WHERE AreaId = @AreaID)
SELECT *
FROM dbo.CompanyMaster
WHERE AreaId IN
(CASE WHEN EXISTS (SELECT BusinessId
FROM dbo.AreaSubscription
WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)
THEN @AreaId
ELSE (SELECT [@Areas].AreaId FROM @Areas)
END)
我收到错误为
Msg 512, Level 16, State 1, Line 11
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
请帮助成功运行查询。我的逻辑是检查每行的(语句)中的条件 AreaId
。
我只想在以下情况下选择该行
- 公司在
AreaSubscription
中拥有由@AreaId
传递的特定区域的订阅条目 - 表
AreaSubscription
没有订阅条目,然后在(SELECT [@Areas].AreaId FROM @Areas)
中评估AreaId
最佳答案
这可能对你有帮助。
SELECT * FROM dbo.CompanyMaster
WHERE AreaId=
(CASE WHEN EXISTS (SELECT BusinessId
FROM dbo.AreaSubscription
WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)
THEN @AreaId ELSE AreaId END)
AND AreaId IN (SELECT [@Areas].AreaId FROM @Areas)
还有一个解决方案是
SELECT * FROM dbo.CompanyMaster A
LEFT JOIN @Areas B ON A.AreaId=B.AreaID
WHERE A.AreaId=
(CASE WHEN EXISTS (SELECT BusinessId
FROM dbo.AreaSubscription
WHERE AreaSubscription.BusinessId = CompanyMaster.BusinessId)
THEN @AreaId ELSE B.AreaId END)
)
关于sql - WHERE CASE WHEN 语句与 Exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18099514/