FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Otra consulta SQL
Buenas otra ves. (SQLServer)
lo que necesito hacer ahora es actualizar un campo con la suma de todos los valores de los registros que se encuentran en otra tabla tabla1.campo = 9 <----- tabla2.campo = 4, 5 (son varios registros) Código:
update a_llamadas set requeridas= sum(ll_s.requeridas), diferencia= sum(ll_s.diferencia) from a_llamadas_segmento ll_s where id_empleado=ll_s.id_empleado group by ll_s.id_empleado
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#2
|
|||
|
|||
no se si te servirá, pero lo que si puedes hacer es algo así
Código:
update tabla a set campo = (select sum(b.campo) from tabla b where condiciones) Espero te sirva |
#3
|
||||
|
||||
Hola.
Puedes usar subconsultas. Creo que algo así te serviria : Código:
update a_llamadas set requeridas=(select sum(ll_s.requeridas) from a_llamadas_segmento ll_s where a_llamadas.id_empleado=ll_s.id_empleado) diferencia= (select sum(ll_s.diferencia) from a_llamadas_segmento ll_s where a_llamadas.id_empleado=ll_s.id_empleado)
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 14-10-2003 a las 20:41:56. |
#4
|
|||
|
|||
Gracias Cadetill , eso lo tenia en mente pero realmente en las tablas que manejo de unos 1.800.000 (por ahora )se pone muy lento el asunto..
de hecho proble eso y tambien hacer un select y correr con un cursor un Update por cada registro del select y es mucho mas eficiente eso, casi un tercio del tiempo, al contrario de lo q yo suponia... pero sigue siendo lento....
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) Última edición por Viet fecha: 14-10-2003 a las 20:37:51. |
#5
|
|||
|
|||
Marc , justo estaba posteando al mismo tiempo que tu....... pero tengo la misma respuesta
Gracias de todos modos a ambos
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#6
|
||||
|
||||
Hola.
Si va lento, comprueba que en la tabla a_llamadas_segmento tengas un índice para el campo id_empleado (o si intervienen más campos en la condición, comprueba que tengas un índice compuesto formado por esos campos). Una consulta de este tipo, con los índices adecuados, no debería ser exageradamente lenta. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#7
|
|||
|
|||
Bien, tengo definido id_empleado y otro campo que necesito como indice, sin embargo la consulta con la Subconsulta es lo suficiente lenta como para pensar una alternativa....
De hecho me ha dado mejor resultado poner un cursor (al que lo trabajo como si fuera un While ) que usar esta query con subconsultas, yo estimo que esto sucede por la cantidad de registros..... pero ahora voy a probar con una tabla temporal y les cuento ..... (este tipo de situaciones me recuerdan al cuento del fisico que estaba posteado en humor.... Siempre hay que buscar la mejor solucion)
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
#8
|
||||
|
||||
Hola.
La ventaja del cursor es que solo tiene que acceder una vez a los datos, y calcula la suma para los dos campos. Mientras que con subconsultas, hay que poner 2 subconsultas. Por lo que se realiza dos veces la consulta a los registros relacionados, para sumar los respectivos campos. Alguna vez he tenido que hacer consultas con subconsultas sobre tablas con más de 100.000 registros, y cuando asignas los índices adecuados he conseguido que se ejecuten muy rapido. Aunque si en este caso, el numero de registros a sumar en la subconsulta es muy elevado, ningún indice conseguirá mejorar el rendimiento de un cursor, que también aprovecha los índices y solo recorre una vez los registros relacionados. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). |
#9
|
|||
|
|||
Como siempre Marc , muchas gracias ....
es verdad lo que comentas , ya lo habia notado.. ... pero en este caso la mejor solucion(que pude encontrar) es con una tabla temporal.... Creo una TablaTemporal, le inserto la Consulta con los resultados y luego realizo un Updete directo con esta tabla. por lo que solo ejecuto dos consultas... es mucho mejor que usar el cursor y las subconsultas.... Muchisimas Gracias nuevamente.... y no se olviden que siempre es posible mejorar lo que hacemos... tan solo basta con mirar los problemas desde otros puntos.... Saludos
__________________
Marín Ignacio Borthiry (Viet) - "El hombre arriesga su vida cada vez que elije y eso es lo que lo hace libre" ;) |
|
|
|