Условие иметь / где пункт в sql? - PullRequest
0 голосов
/ 28 января 2019

Итак, у меня есть простой запрос, который принимает следующие параметры из отчета (код компании и код подразделения) и возвращает список всех элементов, которые находятся в этой компании и в этом подразделении указанной компании.

Теперь я хочу иметь возможность выбрать все подразделения.Таким образом, вместо того, чтобы выбирать компанию одно подразделение одно, вы можете выбрать компанию одно подразделение все.

Итак, я добавил значение в свойства своего кода деления, указав 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)

Если я выберу деление, оно будет работать как надо, но если я выберу «ALL» со значением NULL, оно просто ничего не вернет.Что я делаю неправильно?

1 Ответ

0 голосов
/ 28 января 2019

Проблема в том, что логика NULLS.Условие NULL = NULL оценивается как FALSE. В моем предложении вы спрашиваете: NULL IS NULL, и это ИСТИНА. Пожалуйста, попробуйте, как показано ниже:

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