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