【问题标题】:Using "in" in where condition with case在带大小写的情况下使用“in”
【发布时间】:2018-05-27 00:51:50
【问题描述】:

我有一个 sql 表,其中有一列“类型”。它具有 A、B、C、D 值。
我正在编写一个存储过程,其中类型是 in 参数 @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)  

我编写了一个拆分函数,它以表格格式返回值。

When ALL is selected then the whole table should be returned.选择特定类型时,仅应返回那些类型。

我使用的是 sqlserver 2012。
请帮忙!!

【问题讨论】:

  • 在你的SP中使用IF怎么样

标签: sql-server case where-in


【解决方案1】:

试试这个

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

【讨论】:

  • STRING_SPLIT() 不是SplitString()
  • @Sami 他说这是他写的 UDF
  • 哦,是的,我的错 :)
  • 非常感谢..它成功了。它是如此简单和完美!!
  • @Sami ,当我尝试使用 STRING_SPLIT() 时,它表示对象无效。这就是我创建自己的函数 SplitString() 的原因。
【解决方案2】:

你可以这样做:

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

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

【讨论】:

    【解决方案3】:

    您可以使用IF

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多