我有一个查询像这样:
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]是金钱领域
您需要使用()您的WHERE子句,因为AND运算符具有优先权,现在解释器理解这一点
WHERE ([DC].[ContractedAmount] != 0.00 AND [DC].[CustomerKey] = @CustomerKey)
OR [A].[RegionKey] = @RegionKey
OR [A].[StateKey] = @StateKey
Run Code Online (Sandbox Code Playgroud)
你可能想要
WHERE [DC].[ContractedAmount] != 0.00
AND ( [DC].[CustomerKey] = @CustomerKey
OR [A].[RegionKey] = @RegionKey
OR [A].[StateKey] = @StateKey )
Run Code Online (Sandbox Code Playgroud)