2017-10-19 64 views
0

我知道你不能在更新查询中使用聚合 - 但我无法理解如何编写此更新的语法。这是样本数据使用组更新查询通过

UserID Item   InStock  R2S 
14   S0   Yes 
28   M23   No 
10   Ca2   No 
14   G01   No 
16   G21   Yes 
16   G33   Yes 

现在什么我以后是

我想下面的语法每个用户ID,如果INSTOCK是肯定的所有项目不是更新R2S为yes,但不考虑像14和16等倍数的userID,它只是逐行查看。

我该如何改变这个只更新userID 16为是,因为这两个项目都是r2s?

UPDATE send SET R2S = 'Yes' WHERE (((InStock)='Yes')); 

回答

1

这是SQL Server,但它应该工作或关闭。

update send 
set R2S = 'Yes' 
from send 
join (select UserId 
     from send 
     group by UserId 
     having min(InStock) = 'Yes') Maxes 
on send.UserId = Maxes.UserId 

子查询消除任何人,有一个“否”,然后我们一起上。

我不喜欢数据点居住在2个地方(事实上没有“否”)。查询应在您准备好使用时完成。

另一种方式,可能更容易在未来的读者跟随:

update send 
    set R2S = 'Yes' 
    from send 
    where UserId not in (select UserId 
      from send 
      where InStock = 'No')