0

在 SQL Server 2008 中,是否有一种简化的方式来匹配 CASE 布尔表达式,当表达式为真时,您想选择的值?

代替

CASE
    when item='a' then 'Apple'
    when item='b' then 'Ball'
    when item IN ('c','d') then 'Pet'
    when item !='zz' then 'object'
    else 'Bad_Item'

我想要类似于以下之一的东西。这些当然是伪代码,但想法是使关联更紧密,而不是继续编写更多的 when/then 对

  1. 这样的事情存在吗?

    CASE
        when item ;(=,'a','Apple')
            ;(=,'b','Ball') ;(=,'c' or 'd','Pet')
            ;(!='zz','object') ;'Bad item'
    END
    
  2. 这样的事情存在吗?

    CASE
        when item ;= ('a','b','c' or 'd' : 'Apple','Ball','Pet','Object')
                  ;!= ('zz' : 'Object')
                  ;'Bad item'
    END
    

这些都是伪代码,但只是想知道是否有更快或更简单的东西,或者列出所有要检查的内容,然后是要选择的所有值。

4

3 回答 3

2

结合简单表达式和搜索表达式的示例CASE是:

declare @item as VarChar(10) = 'c'

select case @item
  when 'a' then 'Apple' 
  when 'b' then 'Ball'
  else case
    when @item in ( 'c', 'd' ) then 'Pet' 
    when @item != 'zz' then 'object' 
    else 'Bad_Item' end
  end
于 2012-05-17T19:58:14.063 回答
2

没有像你描述的那样的速记。您可以使用@sarwar026 提到的备用 CASE 语法稍微缩短代码,但<>他发布的行不起作用。除了相等之外,您不能使用该形式 - 没有不等式,没有使用 between 或 >=/<= 的范围,没有 IN(),甚至没有 null 检查。

于 2012-05-17T18:14:11.380 回答
1

据我所知,以下工作

CASE item
    when 'a' then 'Apple'
    when 'b' then 'Ball'
    when 'c' then 'Pet'
    when 'd' then 'Pet'
    // the next line is not possible, so please discard the next line
    *when  <>'zz' then 'object' // not sure about this syntax*
    else 'Bad_Item'
END
于 2012-05-17T18:06:25.767 回答