2013-12-17 55 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)