sql-server - 如何在条件中正确使用 AND/OR

标签 sql-server tsql

我有一个这样的查询:

SELECT AVG([DC].[ContractedAmount]) AS [AverageContractedAmount]
      ,MAX([DC].[ContractedAmount]) AS [MaxContractedAmount]
      ,MIN([DC].[ContractedAmount]) AS [MinContractedAmount]
FROM [DesignCustomer] AS [DC]
INNER JOIN [Design] AS [D] ON [DC].[DesignKey] = [D].[DesignKey]
INNER JOIN [Task] AS [T] ON [D].[DesignKey] = [t].[DesignKey]
INNER JOIN [ProjectDesign] AS [PD] ON [D].[DesignKey] = [PD].[DesignKey]
INNER JOIN [Project] AS [P] ON [PD].[ProjectKey] = [P].[ProjectKey]
INNER JOIN [Address] AS [A] ON [A].[AddressGuid] = [P].[ProjectGuid]
WHERE [DC].[ContractedAmount] != 0.00
AND [DC].[CustomerKey] = @CustomerKey
OR [A].[RegionKey] = @RegionKey
OR [A].[StateKey] = @StateKey

出于某种原因,当我执行 [MinContractedAmount] 返回 0.00 值时,它不关心我的 where 子句 [DC].[ContractedAmount] != 0.00,为什么这不起作用?

注意[DC].[ContractedAmount]是一个money字段

最佳答案

您需要为您的 WHERE 子句使用 () 因为 AND 运算符具有优先权,现在解释器理解这一点

WHERE ([DC].[ContractedAmount] != 0.00 AND [DC].[CustomerKey] = @CustomerKey)
 OR [A].[RegionKey] = @RegionKey
 OR [A].[StateKey] = @StateKey

你可能想要

WHERE [DC].[ContractedAmount] != 0.00 
  AND ( [DC].[CustomerKey] = @CustomerKey
     OR [A].[RegionKey] = @RegionKey
     OR [A].[StateKey] = @StateKey )

关于sql-server - 如何在条件中正确使用 AND/OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52286618/

相关文章:

sql-server - 从 WiX 引导 SQL Express?

c# - 与 SQL Server 一起使用时如何定期刷新 dapper.net 缓存

sql-server - SQL Server - 将无效值转换为 int

java - 启用 SQL 触发器时,Java 中的准备语句失败

sql-server-2005 - SQL Server 2005 计算列结果来自另一个表字段值的聚合

sql-server - MsSQL xml 解析为十进制

sql-server - 使用 IF IsNumeric 作为参数

PHP DBlib PDO 问题

python - 如何将 sp_execute_external_script 中的值输出到表中

sql-server - 修改 RDS 更改 Microsoft SQL Server 许可类型