2017-06-13 167 views
1

我想弄清楚如何在where子句中使用case语句(with!=),这里是我想要做的事情的一个想法:CASE语句WHERE子句中!=条件

SELECT * 
FROM Table1 JOIN Table2 JOIN Table3 
WHERE 
    CASE @fruit 
    WHEN 'Apples' THEN (What would go here to return only data related to apples in Table1?) 
    WHEN 'Citrus' THEN (What would go here to return data related to either oranges or lemons in Table2?) 
    WHEN 'Other' THEN (return all data not related to apples, oranges, or lemons from all 3 tables) (!=) 
    END 

我在where子句中看到了case语句的几个例子,但没有一个带有!=的条件。有任何想法吗?

+0

你想实现什么和SQL数据库?如果你发布你的数据和预期的输出 – maSTAShuFu

+0

SQL Server将会很有帮助。我试图通过从SSRS传递一个变量来过滤表格 – user3088720

+0

好吧......我可以说的是goodluck – maSTAShuFu

回答

1

如果我理解你的问题,你想评估其他布尔表达式除了平等。该CASE语句有两种形式,即你想要一个(总是找平等)和这个其他形式:

CASE 
    WHEN <boolean expression> THEN <result expression> 
    WHEN <boolean expression> THEN <result expression> 
    ELSE <else expression> 
END 
2

简单AND/OR组合会做:

SELECT * 
FROM Table 
WHERE 
    (@fruit != 'Other' AND Fruit = @fruit) OR 
    (@fruit = 'Other' AND Fruit NOT IN('Apples', 'Oranges') 
+0

我看到这是如何检查变量与SSRS传递的内容,但我没有看到它如何使用它来过滤数据(例如Table1.Fruit ='Apples') – user3088720

0

只是使用ELSE的一切

SELECT * 
FROM Table 
WHERE 
    CASE @fruit 
    WHEN 'Apples' THEN (What would go here to return only data related to apples?) 
    WHEN 'Oranges' THEN (What would go here to return only data related to oranges?) 
    ELSE (return all data not related to apples or oranges) (!=) 
    END 

或者您也可以使用参数的情况里面,像这样

SELECT * 
FROM Table 
WHERE 
    CASE 
    WHEN @fruit = 'Apples' THEN (What would go here to return only data related to apples?) 
    WHEN @fruit = 'Oranges' THEN (What would go here to return only data related to oranges?) 
    WHEN @fruit <> 'Apples' AND @fruit <> 'Oranges' THEN (return all data not related to apples or oranges) (!=) 
    END 
+0

感谢您的建议,我不认为我的原始代码很清楚我试图完成的任务,为了清晰我已经对其进行了编辑。 – user3088720

+0

@ user3088720我编辑了代码,看看 – asmgx