我想返回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)