查找多个SQL列并根据查询中列出的已定义数据进行更新

时间:2015-06-12 20:47:33

标签: sql sql-server sql-server-2008

我有一个更新查询,我在其中尝试从单个表中查找列中的数据。同时,在查询中列出的其他已定义数据的同时,一旦找到与该原始搜索的匹配,就更新同一表中的另一列。以下是我的更新声明的示例。我的最终目标是找到' 003447710'然后将AltId更新为' 540112'

UPDATE Site

SET AltId = ('540112'
'540129'
'540142'
'540143')

WHERE CCMFStatus in ('003447710',
'002754540',
'003564370',
'005942870')

我确信可能已经存在这样的事情,但我真的很难找到一种简单方法来快速准确地完成这项工作。

3 个答案:

答案 0 :(得分:0)

试试这个

    update site 
    set altid = a.altid 
    from 
     (select altid,CCMFstatus from site) as a 
    where site.CCMFstatus = a.CCMFstatus

答案 1 :(得分:0)

最好的方法可能是多个update语句:

UPDATE Site
    SET AltId = '540112'
    WHERE CCMFStatus = '003447710';

等等。

如果没有,您可以使用巨型案例陈述或join

来执行此操作
WITH values as (
      SELECT '003447710' as oldstatus, '540112' as newaltid UNION ALL
      SELECT '002754540', '540129' UNION ALL
      SELECT '003564370', '540142' UNION ALL
      SELECT '005942870', '540143'
     )
UPDATE s
    SET AltId = va.newaltid
    FROM site s JOIN
         values v
         ON s.CCMFStatus = v.oldstatus;

如果您已在表格中包含值,则表示您不需要WITH语句。你可以使用该表。

答案 2 :(得分:0)

您是否尝试过使用CASE声明?

UPDATE SITE SET AltID = (CASE 

WHEN CCMFStatus = '003447710' THEN '540112'
WHEN CCMFStatus = '002754540' THEN '540129'
END)

WHERE 

CCMFStatus in ('003447710', '002754540', '003564370', '005942870');

BR,