2013-12-17 33 views
0

独立的情况下,发言之前我只是两个导致错误

CASE obf.field_type 
       WHEN 'Select One' 
         THEN obsc.label 
       ELSE ocd.data 
       END AS value 

和它的工作。 现在我想添加一个案例,我正在检查ga.bases是否为空然后使用ga1.bases,如果ga.bases不为null,则使用ga.bases。所以我说这句话现在

CASE ga.bases 
     WHEN ga.bases IS NULL THEN 
      ga1.bases 
     ELSE 
      ga.bases 
     END 

当我把这两个在一起,他们没有工作如下:

CASE obf.field_type 
       WHEN 'Select One' 
         THEN obsc.label 
       ELSE ocd.data 
       END AS value 

     CASE ga.bases 
     WHEN ga.bases IS NULL THEN 
      ga1.bases 
     ELSE 
      ga.bases 
     END 

我收到以下错误:

ERROR: syntax error at or near "CASE" 
LINE 12: CASE ga.bases 
     ^

********** Error ********** 

ERROR: syntax error at or near "CASE" 
SQL state: 42601 
Character: 298 

我不明白为什么它会是错误的或我该怎么去解决这个问题

+0

你忘了你把两者之间的逗号? –

回答

2

您在两个case语句之间缺少一个逗号。

另外,第二种情况看起来有点奇怪。您可以使用NULL案件的这种形式不考,试试这个:

CASE 
    WHEN ga.bases IS NULL THEN ga1.bases 
    ELSE ga.bases 
END 

注意这里的CASE后没有价值。

但更容易将是:

COALESCE(ga.bases, ga1.bases) 
+0

只有当他想要两列时我才能改正,我不确定,因为他只提供了一个别名。 –

+0

如果我只想出现一列,我将如何更改它? – user3107674

+0

也许连接这两个值。你还没有说你正在使用的是什么RDBMS,但是对于mysql或'a ||而言'concat(a,b)' b' for postgres例如可能适合你。目前还不清楚你是否想要一个值,因为你在第一个CASE后面留下了“AS VALUE”,但是如果你将这两个值连接在一起就不允许这样做(即“AS VALUE”将出现在end) – Bohemian

1

我想你只需要一个逗号:

(CASE obf.field_type 
      WHEN 'Select One' 
        THEN obsc.label 
      ELSE ocd.data 
    END) AS value, 
    (CASE ga.bases 
      WHEN ga.bases IS NULL 
      THEN ga1.bases 
      ELSE ga.bases 
    END)