0

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'

次のいずれかに似たものを希望します。これらはもちろん疑似コードですが、関連付けをより近づけるために、さらに 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 構文を使用してコードを少し短縮できますが、<>彼が投稿した行は機能しません。その形式は、等式以外では使用できません。不等式、範囲間または >=/<= を使用した範囲、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 に答える