2017-10-04 19 views
3

ネストされたcase文やcypherのDecodeやMapのメソッドはありますか?Neo4j Cypher:ネストされたcase文

Case when object1 = 'Animal' 
     then case when object2 = 'CAT' then 1 else 0 
       when object2 = 'RAT' then 2 else 0 
     else -9 end 
end 

構文の問題はありませんが、内部ケースの値は外部ケースに渡されません。エイリアスでも変数を試しました。 は、私も次のことを試してみました:

case object1 = 'Animal' 
     when object2 = 'CAT' then 1 
     when object2 = 'RAT' then 2 
end 

これもどちらか動作しません。 "case object1 = 'Animal'"はIF条件として扱われません.... WHENでのみ推測されます。

答えて

3

使用ネストされたケースの場合:

UNWIND ['Human', 'Animal'] as var1 
UNWIND ['CAT', 'RAT'] as var2 
RETURN var1, var2, 
     CASE WHEN var1 = 'Animal' 
       THEN CASE WHEN var2 = 'CAT' 
          THEN 1 
         ELSE CASE WHEN var2 = 'RAT' 
            THEN 2 
            ELSE 0 
          END 
        END 
      ELSE -9 
     END as result 

それとも、マップを使用することができます。

WITH 
    { Human: { 
     __default: 101 
     }, 
     Animal: { 
     CAT: 1, 
     RAT: 2, 
     __default: 0 
     }, 
     __default: -9 
    } as tree 
UNWIND ['Human', 'Animal', 'Object'] as var1 
UNWIND ['RAT', 'CAT', 'DOG'] as var2 
RETURN var1, var2, 
     CASE WHEN tree[var1] IS NULL THEN tree.__default 
      ELSE CASE WHEN tree[var1][var2] IS NULL THEN tree[var1].__default 
         ELSE tree[var1][var2] 
        END 
     END as result 
関連する問題