【问题标题】:SQL CASE WHEN Parameter is not emptySQL CASE WHEN 参数不为空
【发布时间】:2018-10-11 08:15:24
【问题描述】:

我有下表:

-------------------------------------
groupid      value                   
-------------------------------------
A            10
A            15
B            20
C            50

然后我有一个parameter,称为@groupid
如果参数为A,则结果必须选择所有记录。但是如果参数不是A 那么结果应该只查看选择的参数。

例如,如果parameterB,那么结果应该是:

-------------------------------------
groupid      value                   
-------------------------------------
B            20

例如,如果parameterA,那么结果应该是:

-------------------------------------
groupid      value                   
-------------------------------------
A            10
A            15
B            20
C            50

有什么想法吗?
谢谢。

【问题讨论】:

  • 你在这里说的不是很清楚。你能再解释一下吗?
  • @MEdwin,所以如果参数是'A',那么结果将显示所有记录。然后,如果参数不是“A”,则结果将仅显示所选参数。
  • CASE WHEN 是您在此处寻找的内容。
  • 你为什么不在客户端检查并执行两条 SQL 语句之一呢?它们因不同的计划而大不相同(可能)。通过将它们结合起来,您很可能会获得针对一种情况而非另一种情况进行优化的计划。

标签: sql tsql sql-server-2014


【解决方案1】:

这是我对模型表的看法,只需将@groupid 更改为任何参数'A', 'B' or 'C'

declare @table table (groupId varchar(20), value int)
insert into @table
select 'A',            10 union all
select 'A',            15 union all
select 'B',            20 union all
select 'C',            50

declare @groupid varchar(2)='B'



    SELECT *
    FROM @table
    WHERE  
        'A'= @groupid 
        OR 
        groupid = @groupid;

【讨论】:

    【解决方案2】:

    这似乎是你想要的逻辑:

    SELECT *
    FROM yourTable
    WHERE @groupid = 'A' OR groupid = @groupid;
    

    如果输入为'A',则所有记录都匹配,否则输入只返回groupid值匹配的记录。

    【讨论】:

      【解决方案3】:

      这非常违反直觉,我强烈建议不要这样做。不过,您可以使用以下内容:

      select groupid,value
      from   tablename
      where  @groupid = 'A'
          OR (@groupid <> 'A' AND @groupid = groupid)
      

      一个不太容易混淆的方法是:

      select groupid,value
      from   tablename
      where  @groupid IS NULL
          OR @groupid = groupid
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 2017-05-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多