2017-02-15 3 views
0

У меня есть таблица вроде этого:Выберите строки с одним или другим условием или как в сочетании

Name Candy Fruits 
_____________________ 
John  1  2 
Luis  0  1 
Mary  1  1 
Julio 0  0 

То, что я пытаюсь сделать это, чтобы фильтровать эту информацию, люди, которые только что конфеты: John, Mary. Или просто люди, у кого есть фрукты: John, Luis, Mary

То, что я попытался это:

DECLARE @wCandy BIT, @wFruits BIT 
SET @wCandy = 1, @wFruits = 0 

SELECT Name, Candy, Fruits 
    FROM People 
WHERE (
     (@wCandy = 0) OR (Candy > 0)) 
     AND ((@wFruits = 0) OR (Fruits > 0)) 
     ) 

Какой результат в этом (только народ Cо спаренной более 0 конфет):

Name Candy Fruits 
_____________________ 
John  1  2 
Mary  1  1 

Поэтому, если я установил @wCandy = 0 и @wFruits = 1, я должен увидеть людей с более чем 0 фруктами и наоборот с @wCandy, установленным на 1

Это работает, но есть еще один случай, когда я хочу обоих, те, у кого есть конфеты и фрукты. Результат должен быть:

Name Candy Fruits 
_____________________ 
John  1  2 
Luis  0  1 
Mary  1  1 

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

+0

Неясно, что такое iss ue здесь. Вы только устанавливаете свою переменную конфеты и не устанавливаете переменную фруктов? Если это так, ваша переменная fruit будет NULL и не будет возвращена. –

+0

@SeanLange, извините. Смотрите мое редактирование, пожалуйста! – geekth

+0

Чтобы охватить все случаи, вы должны добавить пользователя, у которого есть Candy, а не Fruits. – McNets

ответ

0

Если вам нужны все пользователи, у которых есть конфеты + все пользователи, Фрукты + все пользователи, у которых есть конфеты и фрукты, использовать UNION:

SELECT Name, Candy, Fruits FROM People WHERE Candy > 0 
UNION 
SELECT Name, Candy, Fruits FROM People WHERE Fruits > 0 
UNION 
SELECT Name, Candy, Fruits FROM People WHERE Fruits > 0 AND Candy > 0 

+------+-------+--------+ 
| Name | Candy | Fruits | 
+------+-------+--------+ 
| John | 1 | 2 | 
+------+-------+--------+ 
| Luis | 0 | 1 | 
+------+-------+--------+ 
| Mary | 1 | 1 | 
+------+-------+--------+ 

Проверьте это здесь: http://rextester.com/VHMV68063

+0

Да, но мне нужны три разных случая! 1: только те с фруктами, 2: только те, у кого есть конфеты, 3: конфеты + фрукты – geekth

+0

Добавьте еще один союз, но результат тот же – McNets

+0

UNION имеет неявный DISTINCT – McNets

0

Я просто угадывая, учитывая другие ответы, которые вы получили, и ваши ответы ... Вы имеете в виду что-то вроде этого?

SELECT P.Name, P.Candy, P.Fruits 
    FROM People P 
    WHERE 
     (
      (
      @wCandy = 1 
      AND P.Candy >= 1 
      ) 
      OR 
      (
      @wCandy = 0 
      AND P.Candy = 0 
      ) 
     ) 
     AND 
     (
      (
      @wFruits = 1 
      AND P.Fruits >= 1 
      ) 
      OR 
      (
      @wFruits = 0 
      AND P.Fruits = 0 
      ) 
     ) 
; 

Это дает вам правильный фильтр, независимо от того, какие условия вы вводите ...

  1. Люди только с конфетами
  2. Люди с только фрукты
  3. Люди с фруктами и конфетами
  4. Люди без фруктов и без конфет