2017-10-19 96 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')