2012-09-09 12 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 2008.グループによるSQL Serverの更新

+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.Column2に基づいてA.Column1(前に挿入した場所)に更新します。ここ

は[によってSQL Serverのアップデートグループ]のSQL-Fiddle Demo

+0

は、しかし別の質問です:場合テーブルAが@Aとして定義されている場合、クエリの最後の行にエラーが返されるのはどうしてですか?スカラー変数 "@A"を宣言しなければなりません。 –

+0

これは別の質問です。宣言されたテーブルの例と作成したクエリで作成する必要があります。おそらくエイリアスの問題、またはテーブルの範囲 –

+0

問題は今、私はsometable.column2 = Grouped.column2と他のものはすべて同じままです。 –