2012-05-17 185 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