sql - WHERE CASE WHEN 语句与 Exists

标签 sql sql-server sql-server-2008

我正在创建一个包含 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

我只想在以下情况下选择该行

  1. 公司在 AreaSubscription 中拥有由 @AreaId 传递的特定区域的订阅条目
  2. 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/

相关文章:

sql - 选择记录进行范围比较

MySQL 数据库规范化

sql-server - SQL Server Management Studio - 网格结果另存为 .CSV - 如何输出文本而不是 UTF-16 (Unicode)

sql-server - 如何减少 MS SQL 数据库的日志文件大小

sql - 如何更改 hierarchyid 中子项和子项的父 ID

sql - 我应该如何处理一对多关系数据库模式中的数据更新?

php - 将多个 php 行放入数据库中,不断重复最后一行,而不是唯一的

PHP ODBC 不接受带空格的列名的别名

sql - 从执行计划中分解 XML

sql-server - SQL Server Express 2008 不分离自动附加文件?