sql 中 having/where 子句中的条件?

Condition in having/where clause in sql?

所以我有一个简单的查询,它从报告(公司代码和部门代码)中获取以下参数和 returns 该公司内部和该公司的该部门内的所有项目的列表.

现在我想要 select 所有部门的选项。因此,您可以选择公司一部门所有,而不是选择公司一部门一。

所以我在我的分区代码属性中添加了一个值,实际代码为 NULL,名称为 'All'。

我的查询很长,但这是最重要的一行

Having Style.Company_Code = @CompanyCode And Style.Division_Code = @DivisionCode

因此在长查询结束时,它只是 select 包含指定公司和部门代码的所有行。

如果我把这一行改成这样(完全删除除法部分)

Having Style.Company_Code = @CompanyCode

它按预期工作,显示了指定公司所有部门的所有项目,完全忽略了部门字段。但是,很明显,这删除了选择部门的功能。

所以我把这行改成了这个。

Having Style.Company_Code = @CompanyCode And (Style.Division_Code = @DivisionCode OR @DivisionCode = NULL)

如果我 select 一个除法,它会正常工作,但如果我 select 'ALL' 的值为 NULL,它只是 returns 什么都没有。我究竟做错了什么?

问题在于 NULLS 背后的逻辑。 条件 NULL = NULL 被评估为 FALSE 在我的建议中,你问:NULL IS NULL,这是 TRUE 请尝试以下操作:

HAVING Style.Company_Code = @CompanyCode 
  AND (Style.Division_Code = @DivisionCode OR @DivisionCode IS NULL)