在SQL Server查询中使用CASE条件

时间:2018-05-17 06:00:05

标签: sql sql-server

我有一张如下表格

ID  Desc    IsWatchList
1   Desc1   1
2   Desc2   0
3   Desc3   0
4   Desc4   1
5   Desc5   1
6   Desc6   0

我有一个变量@WatchList

如果@WatchList ='yes',那么我想选择以下记录

ID  Desc    IsWatchList
1   Desc1   1
4   Desc4   1
5   Desc5   1

如果@WatchList ='不,我想选择下面的所有记录

ID  Desc    IsWatchList
1   Desc1   1
2   Desc2   0
3   Desc3   0
4   Desc4   1
5   Desc5   1
6   Desc6   0

我如何在Where子句中使用CASE条件?

4 个答案:

答案 0 :(得分:2)

如果@WatchList只有两个状态,0和1(或者是'是'和'没有'),那么您甚至不需要求助于CASE WHEN子句中的WHERE。你可以这样做:

SELECT Id, Desc, IsWatchList
FROM MyTable
WHERE IsWatchList = 1 OR @WatchList = 0;

(如果是两种状态,我还建议将@WatchList的类型更改为BIT以限制状态)

答案 1 :(得分:2)

您只需要使用OR条件。它会完成你的工作。

Select * from MyTable
WHERE (@WatchList = 'NO' OR (@WatchList = 'yes' AND IsWatchList =1))

答案 2 :(得分:0)

    declare @table table(id int, [desc] varchar(100), iswatchlist bit);
    insert into @table values (1,'desc1',1)
    insert into @table values (2,'desc2',0)
    insert into @table values (3,'desc3',0)
    insert into @table values (4,'desc4',1)
    insert into @table values (5,'desc5',1)
    insert into @table values (6,'desc6',1)
    declare @bit varchar(3) = 'yes'
    select id,[desc],isWatchList from @table where isWatchList >= case @bit when 'no' then 0 when 'yes' then 1 end

答案 3 :(得分:0)

您只需使用>=

即可
declare @WatchList bit = 0

select *
from table1
where IsWatchList >= @WatchList
;

| ID |  Desc | IsWatchList |
|----|-------|-------------|
|  1 | Desc1 |        true |
|  2 | Desc2 |       false |
|  3 | Desc3 |       false |
|  4 | Desc4 |        true |
|  5 | Desc5 |        true |
|  6 | Desc6 |       false |


declare @WatchList bit = 1

select *
from table1
where IsWatchList >= @WatchList
;

| ID |  Desc | IsWatchList |
|----|-------|-------------|
|  1 | Desc1 |        true |
|  4 | Desc4 |        true |
|  5 | Desc5 |        true |

请参阅:http://sqlfiddle.com/#!18/d2a59f/1