我有一张这样的表:
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语句,但我没有让它工作。我希望有人可以提供帮助。
答案 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 |
+------+-------+--------+
答案 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
)
)
;
无论您输入什么条件,这都会为您提供合适的过滤器...