在带有 case 的 where 条件下使用“in”

问题描述 投票:0回答:3

我有一个 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 函数,它以表格格式返回值。

选择 ALL 时,应返回整个表。当选择特定类型时,应仅返回这些类型。

我正在使用 SQL Server 2012。

sql-server case where-in
3个回答
3
投票

试试这个

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

0
投票

你可以像下面这样做:

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

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

0
投票

您可以使用

IF

IF @type ='ALL'
    SELECT *
    FROM MainTable
        ELSE
            SELECT *
            FROM MainTable
            WHERE Type IN (SELECT data FROM SplitString(@type,',') )
© www.soinside.com 2019 - 2024. All rights reserved.