Фильтрация представления с использованием трехбитных столбцов - PullRequest
0 голосов
/ 19 марта 2020

Представление может быть отфильтровано по этим трем столбцам:

Profit(bit), Loss(bit), NoImpact(bit)

Предыстория: на веб-странице пользователь может выбрать фильтрацию данных на основе трех флажков (Прибыль, Убыток, Без влияния).

Что я ищу: если они проверяют «Прибыль», возвращают все, где «Прибыль» = 1, если тогда они проверяют «Убыток», показывают результаты «Прибыль» И «Убыток», но исключают «NoImpact» и т. Д. .

Это то, что я пробовал до сих пор, и часть моего сохраненного про c:

WHERE (
   ((@ProfitSelected is null OR @ProfitSelected = 'false') OR (Profit = @ProfitSelected))
   --I've tried using AND here as well.
   OR ((@LossSelected is null OR @LossSelected = 'false') OR (Loss = @LossSelected))
   OR ((@NoImpactSelected is null OR @NoImpactSelected = 'false') OR (NoImpact = @NoImpactSelected))
)

END


exec dbo.SearchErrorReports @ProfitSelected = 1, @LossSelected = 1, @NoImpactSelected = 0

Спасибо.

РЕДАКТИРОВАТЬ: По запросу здесь некоторые тесты и желаемые результаты:

ТЕСТ exec dbo.SearchErrorReports @ProfitSelected = 1, @LossSelected = 1, @NoImpactSelected = 0

Результат

id | Profit   | Loss   | NoImpact
----------------------------------------
 1 | 1        | 0      | 0
 2 | 1        | 0      | 0
 3 | 0        | 1      | 0
 4 | 0        | 1      | 0
 5 | 0        | 1      | 0

ТЕСТ exec dbo.SearchErrorReports @ProfitSelected = 0, @LossSelected = 1, @NoImpactSelected = 0

Результат

id | Profit   | Loss   | NoImpact
----------------------------------------
 1 | 0        | 1      | 0
 2 | 0        | 1      | 0
 3 | 0        | 1      | 0

ТЕСТ exec dbo.SearchErrorReports @ProfitSelected = 1, @LossSelected = 1, @NoImpactSelected = 1

Результат

id | Profit   | Loss   | NoImpact
----------------------------------------
 1 | 1        | 0      | 0
 2 | 0        | 1      | 0
 3 | 0        | 1      | 0
 4 | 0        | 0      | 1
 5 | 1        | 0      | 0
 6 | 0        | 0      | 1

Et c и все различные перестановки.

Ответы [ 2 ]

1 голос
/ 19 марта 2020

Если я правильно понял вопрос, следующий пункт WHERE должен вернуть ожидаемые результаты:

WHERE 
    (@ProfitSelected = 1 AND Profit = 1) OR
    (@LossSelected = 1 AND Loss = 1) OR
    (@NoImpactSelected = 1 AND NoImpact = 1) OR
    (@ProfitSelected = 0 AND @LossSelected = 0 AND @NoImpactSelected = 0)
0 голосов
/ 23 марта 2020

@ Жоров мне очень помог. Мне пришлось немного изменить его запрос, чтобы охватить все контрольные примеры:

WHERE (@ProfitSelected = 0 AND @LossSelected = 0 AND @NoImpactSelected = 0) OR
    (@ProfitSelected = 1 AND Profit = 1) OR
    (@LossSelected = 1 AND Loss = 1) OR
    (@NoImpactSelected = 1 AND NoImpact = 1) OR
    (@ProfitSelected = 1 AND @LossSelected = 1 AND @NoImpactSelected = 1)
...