我有一个更新查询,我在其中尝试从单个表中查找列中的数据。同时,在查询中列出的其他已定义数据的同时,一旦找到与该原始搜索的匹配,就更新同一表中的另一列。以下是我的更新声明的示例。我的最终目标是找到' 003447710'然后将AltId更新为' 540112'
UPDATE Site
SET AltId = ('540112'
'540129'
'540142'
'540143')
WHERE CCMFStatus in ('003447710',
'002754540',
'003564370',
'005942870')
我确信可能已经存在这样的事情,但我真的很难找到一种简单方法来快速准确地完成这项工作。
答案 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,