2017-08-13 55 views
0

我想在我的表中添加一列,它將另一列中的某些值映射到新列。 (人口是另一列,我有),這是我一直使用的是什麼:SQL數據庫中的更新表

UPDATE my_table 
SET popmatch2 
    CASE 
     WHEN popmatch IN ('MFNR', 'GQNR', 'EWNR', 'MHNR', 'OUTONR', 'OUTADVNR') 
      THEN popmatch2 IN ('GENERAL', 'GENERAL', 'GENERAL', 'GENERAL', 'ENDEMIC', 'ENDEMIC') 
      ELSE POPULATION; 

這不是工作

回答

2

與您當前語法的主要問題是,你需要分配popmatach2列的東西。在這種情況下,分配給CASE表達式可能有意義。 A CASE表達式必須返回一個值,而不是一組值,並且每個WHEN條件都應返回一個值。

UPDATE my_table 
SET popmatch2 = CASE WHEN popmatch IN ('MFNR', 'GQNR', 'EWNR') THEN 'GENERAL' 
        WHEN popmatch IN ('OUTONR', 'OUTADVNR') THEN 'ENDEMIC' 
        ELSE 'POPULATION' END; 

你需要把單引號括起來POPULATION如果你打算爲實現這一目標是一個字符串文字。

+0

ORA-00936:缺少表達 42000/936 - 現在遇到此錯誤 –

+0

@JDoe重新載入您的頁面。 –

+0

人口是我所指的另一個專欄。然而,即使它作爲一個字符串它不起作用 –

1

這是正確的語法:

update my_table 
    set popmatch2 = (case when popmatch in ('MFNR', 'GQNR', 'EWNR', 'MHNR') 
         then 'GENERAL' 
         when popmatch in ('OUTONR', 'OUTADVNR') 
         then 'ENDEMIC' 
         else 'POPULATION' -- I'm guessing this is really a string 
        end); 

你想幹什麼在更新之後有一個commit,所以更改被提交。

注:

  • case必須有一個end
  • then應該是單個字符串。
  • 每個when都應該導致返回一個字符串。