我有一张如下表格
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条件?
答案 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 |