SQL Server 2008:案例矩阵?选择性案例?案例协会?

时间:2012-05-17 18:03:20

标签: sql-server-2008 case associative-array

在SQL Server 2008中是否有一种缩写方法来匹配CASE布尔表达式,以及表达式为true时要选择的值?

而不是

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'

我想要一些类似下列之一的东西。这些当然是伪代码,但我们的想法是让关联更紧密,而不是在/然后成对时继续写更多

  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
    
  3. 这些都是伪代码,但只是想知道是否有更快或更简单的东西,或者要检查所有要检查的所有内容的列表,然后选择所有值。

3 个答案:

答案 0 :(得分:2)

没有像你描述的简写。您可以使用@ sarwar026提到的备用CASE语法稍微缩短代码,但是他发布的<>行不起作用。除了相等之外你不能使用那个形式 - 没有不平等,没有使用范围或者&gt; = /&lt; =,没有IN(),甚至没有空检查。

答案 1 :(得分: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

答案 2 :(得分: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