在事例表达式中选择null值和非null值



我想返回FacilityCode等于@SelectedFacilityCode的所有工单,除非它等于"Any"。然后我希望它返回所有工作订单,包括FacilityCode为null的工作订单。问题是当FacilityCode=FacilityCode时,它只返回FacilityCode不为null的所有工单。当@SelectedFacilityCode='Any'时,如何同时返回null值和非null值?

我的实际查询比这更复杂,但这是问题的关键。如果有帮助的话,我正在使用SQL Server。

谢谢!

SELECT * FROM WorkOrders
WHERE FacilityCode = CASE
WHEN @SelectedFacilityCode = 'Any' THEN FacilityCode
ELSE @SelectedFacilityCode
END

CASE表达式而不是语句,即它只能返回值而不能返回表达式。您需要逻辑运算符(AND/OR(,例如

SELECT *
FROM WorkOrders
WHERE @SelectedFacilityCode = 'Any'
OR FacilityCode = @SelectedFacilityCode

我强烈建议学习在SQL中使用逻辑运算符,因为它们是编写查询的核心构建块。包括使用括号以确保正确排序。

SELECT *
FROM WorkOrders
WHERE @SelectedFacilityCode in ('Any', FacilityCode)

最新更新