2017-10-04 123 views
3

在cypher中是否有嵌套case語句或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