在 where 条件下使用 "in"

Using "in" in where condition with case

我有一个 sql table,其中有一列 "type"。它具有值 A、B、C、D。
我正在编写一个存储过程,其中类型是输入参数@type.
@type 可以具有值 'A' 或 'A,B,C' 或 'ALL',具体取决于屏幕上的用户 selection。这意味着用户可以 select 单个、多个或所有选项。
我需要使用列 "type".

上的条件从我的 table 中过滤数据

我想要类似于下面的内容

select * from maintable where
( case when @type ='ALL' then 1=1) else
 type in (select data from SplitString(@type,',')) end)  

我写了一个拆分函数,它 return 值以 table 格式。

当 ALL 被 selected 时,整个 table 应该被 returned。当特定类型被 selected 时,只有那些类型应该被 returned。

我正在使用 sqlserver 2012。
请帮忙!!

试试这个

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:

IF @type ='ALL'
    SELECT *
    FROM MainTable
        ELSE
            SELECT *
            FROM MainTable
            WHERE Type IN (SELECT data FROM SplitString(@type,',') )