我有一个 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。
试试这个
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,',') )