2012-09-09 27 views
12
insert into tableA (column1) 
select min(tableC.column1) 
from tableB 
inner join tableC on (tableC.coumn2 = tableB.column1 
and tableB.column2 = tableA.column2) 
group by tableA.column2 

如何根據條件tableB.column2 = tableA.column2將上述內容更改爲組更新而不是插入組?帶有羣組的SQL Server更新通過

請注意,我用的SQL SERVER 2008.

+0

可能重複(http://stackoverflow.com/questions/2853403/sql-server-update-group-by) –

回答

24
Update A set Column1 = minC  
    from (select Ab.Column2, min(C.Column1) as minC 
      from A Ab 
      inner join B on Ab.Column2 = B.Column2 
      inner join C on C.column2 = B.Column2 --No need to add again the A.col2 = B.col2 
      group by Ab.Column2) Grouped where A.Column2 = Grouped.Column2 

這是你想要的嗎? 這將得到每個列A的C.Column1最小值,並將根據條件A.Column2 = Grouped.Column2A.Column1(這是您之前插入的位置)更新它。

這裏是[SQL服務器更新組由]一個SQL-Fiddle Demo

+0

另一個問題是:如果表A被定義爲@A,那麼它是如何返回給我一個查詢的最後一行的錯誤:必須聲明標量變量「@A」,以及我將如何解決這個問題? –

+0

這是另一個問題,您應該使用聲明表的示例以及您所做的查詢來創建。可能是一個別名的問題,或表的範圍 –

+0

現在的問題是我不能寫更新@A sometable ... wheretabletable.column2 = Grouped.column2和其他一切保持不變。 –