2012-05-17 140 views
0

在SQL Server 2008中是否有一种缩写方式来匹配CASE布尔表达式,以及表达式为true时要选择的值?SQL Server 2008:案例矩阵?选择性案例?案例协会?

而不是

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 
    

再次那些是伪代码,而只是想知道如果有什么更快或更简单或与所有的事情的列表来检查,然后所有的值来选择。

回答

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 
+0

的<>不起作用。 'WHEN NOT'zz'然后......' –

+0

谢谢。我已经在我的回答中发表了评论:) – sarwar026

+0

您可以混合使用两种'CASE'风格,即使用此答案中的简单“CASE”,并在ELSE中放置搜索到的'CASE'来处理更复杂位。 – HABO

2

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

+0

'的位置,好吧,这是很好的知道,保存一些测试错误,谢谢 – VISQL

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 
+0

所以通过声明一个变量,我会看到的数据我可以省略“when item =”来表示需要相等的部分吗?这很酷。对于“IN”情况,是否有类似的简短代码?感谢您的帮助。 – VISQL

+0

@VISQL因为我上面提到的,IN没有简写,只用于直接,非NULL的平等 –

+0

@VISQL - [MSDN]中描述了两种不同形式的CASE(http://msdn.microsoft.com/en-us /library/ms181765.aspx)_simple_“CASE”接受一个表达式,并将其与WHEN中的一系列值相匹配,就像这个答案的第一部分一样_searched_“CASE”会经历一系列的WHEN每个人都有一个布尔表达式,寻求真理。一个对于简单的查找是有好处的,另一个对于处理混淆的混淆可能涉及复杂关系中许多变量的测试。 – HABO