case子语句中带有通配符的case语句

时间:2017-02-02 16:59:04

标签: sql where-in

我有一个从SQL Server 2012中的视图返回的大型数据集。我需要根据6个不同的标准过滤数据。我在报告中设置了参数,并希望使用查询中的参数来减小大小 所以我有以下情况:

select * from vw_ABC where p1 in @p1 and p2 in @p2 ...

棘手的部分是如何处理用户不想过滤其中一个标准的情况。我试图避免动态sql,但如果这是唯一的方式,那么它 调用报告时,用户将列出所有6个参数。默认值为' ALL'。他们可以使用一个或所有参数创建报告。大多数情况下它将是2或3(名称城市邮编orderid事情这样)
任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

我想你不是在谈论IN而是谈论=。那将是:

select * 
from vw_ABC 
where (p1 = @p1 or @p1 = 'ALL')
  and (p2 = @p2 or @p2 = 'ALL')
  ...

答案 1 :(得分:0)

一种方法是创建第二组参数,以指示是否需要使用相应的参数:

SELECT *
FROM vw_ABC
WHERE
    (@u1=0 OR p1=@p1)
AND (@u2=0 OR p2=@p2)
AND (@u3=0 OR p3=@p3)

这样您就不需要保留一个特殊值来表示 all :如果您想使用@pX,请将@uX设置为1,其中X是参数编号。

答案 2 :(得分:0)

将参数设置为可选并检查NULL ....让我为您挖掘一个示例

declare @id int = 1

select * from users u
where (@id IS NULL and u.id=u.id) or (u.id=@id)