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

Come si modifica il precedente a un aggiornamento con gruppo anziché invece di inserimento in base al criterio tableB.column2 = tableA.column2?Aggiornamento server SQL con gruppo di

Nota che sto usando SQL SERVER 2008.

+0

possibile duplicato di [Gruppo SQL Server Update] (http://stackoverflow.com/questions/2853403/sql-server-update-group-by) –

risposta

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 

E 'questo quello che vuoi? Ottiene per ogni colonnaA il valore minimo C.Column1 e lo aggiornerà in A.Column1 (che è dove si stava inserendo prima), in base alla condizione A.Column2 = Grouped.Column2.

ecco un SQL-Fiddle Demo

+0

un'altra domanda però: se la tabella A è definita come @A, quindi come mai mi è stato restituito un errore per l'ultima riga della query: È necessario dichiarare la variabile scalare "@A" e come risolverei questo problema? –

+0

Questa è un'altra domanda, dovresti creare un esempio della tabella dichiarata e la query che hai fatto. Probabilmente è un problema di alias, o l'ambito della tabella –

+0

Il problema è che ora non riesco a scrivere l'aggiornamento @A a volte ... dove sometable.column2 = Grouped.column2 e tutto il resto rimane lo stesso. –