在SQL中有/ where子句的条件?

时间:2019-01-28 15:50:35

标签: sql sql-server where-clause having

因此,我有一个简单的查询,该查询从报告中获取以下参数(公司代码和部门代码),并返回该公司内以及该公司部门内所有项目的列表。

现在,我希望可以选择所有部门。因此,您可以选择全部选择公司一部门,而不是选择公司一部门。

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

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

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

因此,在长查询的结尾,它仅选择具有指定公司和部门代码的所有行。

如果我将行更改为此(完全删除分隔部分)

Having Style.Company_Code = @CompanyCode

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

因此我将行更改为此。

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

如果我选择一个除法,它会按预期工作,但是如果我选择一个值为NULL的'ALL',它什么也不会返回。我究竟做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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