Sql server 在where条件和case中使用“in”

Sql server 在where条件和case中使用“in”,sql-server,case,where-in,Sql Server,Case,Where In,我有一个sql表,它有一个列类型。它有值A、B、C、D。 我正在编写一个存储过程,其中type是参数@type中的类型。 @根据屏幕上的用户选择,类型可以具有值“A”或“A、B、C”或“ALL”。这意味着用户可以选择单个、多个或所有选项。 我需要根据列类型的条件筛选表中的数据 我想要和下面类似的东西 select * from maintable where ( case when @type ='ALL' then 1=1) else type in (select data from Sp

我有一个sql表,它有一个列类型。它有值A、B、C、D。 我正在编写一个存储过程,其中type是参数@type中的类型。 @根据屏幕上的用户选择,类型可以具有值“A”或“A、B、C”或“ALL”。这意味着用户可以选择单个、多个或所有选项。 我需要根据列类型的条件筛选表中的数据

我想要和下面类似的东西

select * from maintable where
( case when @type ='ALL' then 1=1) else
 type in (select data from SplitString(@type,',')) end)  
我编写了一个split函数,它以表格格式返回值

选择“全部”后,应返回整个表。选择特定类型时,只应返回这些类型

我正在使用SQLServer2012。 请帮忙

试试这个

SELECT * 
FROM maintable 
WHERE @type ='ALL' OR    
(@type <>'ALL' AND TYPE IN (SELECT data FROM SplitString(@type,','))

您可以按如下方式进行操作:

if @type ='ALL' 
    set @type ='A,B,C,D'

select * from maintable where
type in (select data from SplitString(@type, ','))
如果:


在你的唾沫中使用IF怎么样SplitString@Sami他说这是一个他写的UDF哦,是的,我的错:非常感谢..它起了作用。它是如此简单和完美@Sami,当我尝试使用STRING_SPLIT时,它说的是无效对象。这就是我创建自己的函数SplitString的原因。
IF @type ='ALL'
    SELECT *
    FROM MainTable
        ELSE
            SELECT *
            FROM MainTable
            WHERE Type IN (SELECT data FROM SplitString(@type,',') )