在 case 表达式中选择空值和非空值

Selecting null and non-null values in a case expression

我想要 return FacilityCode 等于 @SelectedFacilityCode 的所有工单,但等于 'Any' 的除外。然后我希望它 return 所有工作订单,包括 FacilityCode 为空的工作订单。问题是当 FacilityCode = FacilityCode 时,它​​仅 returns 所有 FacilityCode 不为空的工单。当@SelectedFacilityCode = 'Any' 时,如何 return 空值和非空值?

我的实际查询比这更复杂,但这是问题的症结所在。如果有帮助,我正在使用 SQL 服务器。

谢谢!

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

CASE 是一个 表达式 而不是 语句 即它只能 return 一个值而不是表达式.您需要逻辑运算符 (AND/OR),例如

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

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

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