2015-12-16 48 views
1

我想找到具有价值,说“N/A”更新多个ID基于字段值的

我希望再更新,他们具有相同的CommonID​​到数据的所有行数据的所有行所述NewDataHere列,以便在下面的示例中ID 1和2会受到影响

我在存储过程中

代码远这样做:

DECLARE @sqlPRatingChange NVARCHAR(MAX) 
SET @sqlPRatingChange = 'UPDATE TblAsbestos SET NewDataHere= ''NA'' 
WHERE (SELECT ID FROM TBLASBESTOS WHERE VALUE= ''N/A'')''' 
EXEC (@sqlPRatingChange) 
数据库作为它应该代码后的

  • ID-VALUE-NewDataHere

    1-N/AN/A

    2-CN/A

    2 -N/AN/A

    1-AN/A

    3-B-''

+2

用您正在使用的数据库(推测为SQL Server)标记您的问题。 –

回答

2

为什么使用动态SQL?您的查询似乎足够接近。它只是需要的相关条款:

UPDATE TblAsbestos 
    SET NewDataHere = 'NA' 
    WHERE (SELECT ID FROM TBLASBESTOS a2 WHERE VALUE = 'N/A' AND TblAsbestos.id = a2.id); 

在SQL Server中,我可能会倾向于做一个使用CTE和窗口功能:

with toupdate as (
     select a.*, 
      sum(case when value = 'N/A' then 1 else 0 end) over (partition by id) as numNAs 
     from TblAsbestos a 
    ) 
update toupdate 
    set NewDataHere = 'NA' 
    where numNAs > 0; 
+0

现在你说,不知道!过于复杂的事情!我收到错误:'a'附近的语法不正确。从你的代码(第一个) – indofraiser

0

试试这个:

UPDATE TblAsbestos一个 SET NewDataHere ='NA' WHERE Exists(SELECT Top 1 ID FROM TBLASBESTOS a2 WHERE Upper(value)='N/A' AND a.id = a2.id);

2

这应该可能是戈登的回答评论,但它得到了太久,这一个答案得到帮助的格式...

不正确的语法错误,因为在SQL Server中你不能别名的目标更新语句(不要与使用别名作为允许的目标混淆)。 Where子句也是不正确的,它似乎是在EXISTS子句和IN子句之间混合使用的,但最终都没有结束。我想你需要:

UPDATE TblAsbestos 
SET  NewDataHere = 'NA' 
WHERE EXISTS 
     ( SELECT 1 
      FROM TblAsbestos AS a 
      WHERE a.Value = 'N/A' 
      AND  a.id = TblAsbestos.id 
     ); 

或者

UPDATE TblAsbestos 
SET  NewDataHere = 'NA' 
WHERE ID IN (SELECT a.ID FROM TblAsbestos AS a WHERE a.Value = 'N/A'); 
1

试试这个。只需将table1替换为您的表名:

update a 
set NewDataHere = 'N/A' 
from table1 as a 
where exists(select 1 from table1 as b where a.id = b.id and b.value = 'N/A')