2017-10-04 1 views
3

중첩 된 case 문 또는 디코드 또는 Map for cypher에 대한 방법이 있습니까?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