选择具有一个或另一个条件的行或两者合并

时间:2017-02-15 22:28:26

标签: sql-server tsql

我有一张这样的表:

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))
       )

这导致了这一点(只有人们超过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

我尝试了很多东西,比如使用CASE语句,但我没有让它工作。我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:0)

如果您需要拥有Candy +所有用户的所有用户拥有Fruit +所有拥有Candy和Fruits的用户,请使用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

答案 1 :(得分: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. 没有水果,没有糖果的人