Sql 同时更新多个列

Sql 同时更新多个列,sql,teradata,Sql,Teradata,我需要在同一个查询中更新具有多个列的表,并且使用if-else子句可以指导我获得所需的输出 update tablename set IsEmailable=CASE WHEN Email IS NOT NULL AND DNIInd <> 'Y' AND DoNotEmail <> 'Y' THEN 'Y' ELSE 'N' END, IsCallable=CASE WHEN (ResTlphnNum IS NOT NUL

我需要在同一个查询中更新具有多个列的表,并且使用if-else子句可以指导我获得所需的输出

update tablename 
set 
  IsEmailable=CASE 
    WHEN Email IS NOT NULL AND DNIInd <> 'Y' AND DoNotEmail <> 'Y' THEN 'Y' 
    ELSE 'N' 
  END,
  IsCallable=CASE 
    WHEN (ResTlphnNum IS NOT NULL OR CellTlphnNum IS NOT NULL) AND DoNotCallInd <> 'Y' AND DNIInd <> 'Y' THEN 'Y' 
    ELSE 'N' 
  END,
  IsMailable=CASE 
    WHEN AddrLine1Txt IS NOT NULL AND BadAddrInd <> 'Y' AND DoNotMailInd <> 'Y' AND DNIInd <> 'Y' THEN 'Y' 
    ELSE 'N' 
  END;

只需使用案例陈述:

update tablename set IsEmailable=CASE WHEN Email IS NOT NULL AND DNIInd='N' AND DoNotEmail='N' THEN 'Y' ELSE 'N' END, 

IsCallable=CASE WHEN (ResTlphnNum IS NOT NULL OR CellTlphnNum IS NOT NULL) AND DoNotCallInd='N' AND DNIInd='N' THEN 'Y' ELSE 'N' END,

IsMailable=CASE WHEN AddrLine1Txt IS NOT NULL AND BadAddrInd='N' AND DoNotMailInd='N' AND DNIInd='N' THEN 'Y' ELSE 'N' END

我试过了,但没有成功,我们如何更新多个列,我的意思是像set iscalable=CASE和IsMailable=CASE@dani你可能应该比没有工作更具体;此答案应完全符合您的要求。列之间的逗号应允许多个列更新。你犯了什么错误?更新表集field1=value1,field2=value2。查看您的评论,您正在尝试使用和。不要这样做。请按原样查看我的示例查询。每个要更新的字段之间都有一个逗号。@UeerDo我的意思是我在使用此查询更新表名集IsEmailable=CASE时,电子邮件不为NULL,DNIInd='N'和DoNotEmail='N'然后是'Y'ELSE'N'END,IsCallable=CASE时,restlphnum不为NULL或CelltPhnnum不为NULL,DoNotCallInd='N'和DNIInd='N'然后是'Y'ELSE'N'END,IsMailable=当addrline1Text不为NULL且baddrind='N'和DoNotMailInd='N'和DNIInd='N'以及'Y'ELSE'N'结束时的情况;我需要在查询中设置IsCallable=CASE和IsMailable=CASE吗?查询看起来不错。你有错误吗?如果只更新一个字段,case语句是否有效?这应该适用于sql server或oracle。您是否使用其他dbms?此更新是有效的语法。请添加一些您希望更新的行的示例;由于这现在是有效的sql,因此问题必须与用于确定如何设置它们的逻辑有关。