2017-08-13 59 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都应该导致返回一个字符串。