sql where语句有多个值

时间:2015-06-30 17:58:53

标签: sql sql-server sql-server-2008 tsql

在我的WHERE语句中,我试图找到一些具有两个条件的实体,我不能使用IN语句,因为它的工作方式与OR类似,只返回一个很多的结果,意味着如果我我正在使用:

WHERE R.RiskID IN(221,111)

所以我会得到有或111或222的文件 我使用AND语句是一个问题,因为proc是动态的并且生成复杂的代码。 例如:

WHERE R.RiskID IN(111,222)

同样,它的工作方式与OR语句类似。 defenition表每个RiskID都有一行,意味着如果我对同一个文档有很多RiskIDs,则表示:

RiskID      DocumentID
111           345
222           345     
333           345
999           846
111           846

我的最终目的地应该是,如果我的输入是111,222,我需要显示所有111和222 RiskIDs的文件。

2 个答案:

答案 0 :(得分:0)

如果有人遇到同样的问题,那么答案就是组合和许可...... ;with list (n) as ( select * from ( values ('a'), ('b'), ('c'), ('d'), ('e') ) x(y) ), cte as ( select CAST( n AS NVARCHAR(MAX) ) n from list c union all select CAST( l.n + ',' + c.n AS NVARCHAR(MAX) ) from cte c, list l where l.n > c.n ) select * from cte

生成器为FROM clouse中的VALUES生成所有可能的组合。

答案 1 :(得分:-1)

胜利的过度杀伤力。将此脚本用于较小的查询或索引查询。 我已经提出了两个选项,一个是手动定义Riskid或取消注释sql查询以执行通配符或输入基于选择。

 Create table #Risk (RID Int Identity,RiskID int)

/* Manual Insert */
insert into #Risk select 111
insert into #Risk select 222

/* SQL insert */
/*
insert into #Risk select distinct RiskID from Tablename where RiskID in (111,222)
*/

Declare @Loop int
set @Loop = 1

Create table #final (RiskID int, DocumentID int)

while @Loop < (select MAX(rid)+1 from #Risk)
Begin
insert into #final
select Riskid, DocumentID
from tablename
where riskid = (select riskid from #Risk where RID = @Loop)

set @Loop = @Loop + 1

End