2012-09-09 13 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 

Jak zmienić powyższą aktualizację w grupie zamiast wstawiania z grupą według kryteriów tableB.column2 = tableA.column2?Aktualizacja SQL Server z grupą przez

Zauważ, że używam SQL SERVER 2008.

+0

możliwe duplikat [SQL Server Update w Grupie przez] (http://stackoverflow.com/questions/2853403/sql-server-update-group-by) –

Odpowiedz

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 

Czy tego chcesz? Zostanie to pobrane dla każdej kolumnyA wartość minimalna C.Column1 i zostanie zaktualizowane w A.Column1 (tam wstawiano wcześniej), na podstawie warunku A.Column2 = Grouped.Column2.

o to SQL-Fiddle Demo

+0

kolejne pytanie jednak: jeśli tabela A jest zdefiniowana jako @A, a następnie, w jaki sposób zwróciło mi błąd dla ostatniej linii zapytania: należy zadeklarować zmienną skalarną "@A" i jak rozwiązać ten problem? –

+0

To kolejne pytanie, które powinieneś utworzyć z przykładem deklarowanej tabeli i zapytaniem, które napisałeś. Prawdopodobnie jest to problem aliasu lub zakres tabeli –

+0

Problem jest w tej chwili, że nie mogę napisać aktualizacji @ Dosyć ... where sometable.column2 = Grouped.column2 i wszystko inne pozostaje takie samo. –