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

¿Cómo cambiaría lo anterior a una actualización con un grupo por en lugar de insertar con un grupo según los criterios tableB.column2 = tableA.column2?Actualización del servidor SQL con el grupo

Tenga en cuenta que estoy usando SQL SERVER 2008.

+0

posible duplicado del [Grupo de actualización de servidor SQL] (http://stackoverflow.com/questions/2853403/sql-server-update-group-by) –

Respuesta

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 

¿Es esto lo que quieres? Esto obtendrá para cada columna el valor C.Column1 mínimo, y lo actualizará en A.Column1 (que es donde estaba insertando antes), según la condición A.Column2 = Grouped.Column2.

aquí es un SQL-Fiddle Demo

+0

otra pregunta, sin embargo: si la tabla A se define como @A, entonces ¿cómo es que me devolvió un error para la última línea de la consulta: debe declarar la variable escalar "@A" y cómo solucionaría este problema? –

+0

Esa es otra pregunta, deberías crear con un ejemplo de la tabla declarada y la consulta que hiciste. Probablemente es un problema de alias, o el alcance de la tabla –

+0

El problema es que ahora no puedo escribir la actualización @A sometable ... donde sometable.column2 = Grouped.column2 y todo lo demás permanece igual. –

Cuestiones relacionadas