SQL - un solo update en lugar de 3

   
Vista:

un solo update en lugar de 3

Publicado por roberto r_segoviano@yahoo.com.mx (9 intervenciones) el 18/04/2017 18:14:56
Estimados amigos:
Soy novato en la programacion de SQL y pido su ayuda con la siguiente duda: dentro de un procedimiento almacenado tengo 2 grupos de 3 updates cada uno donde en cada uno de ellos es practicamente el mismo codigo excepto que en el primero calculo las ventas totales, en el segundo calculo las ventas para cuando el numero de cliente es mayor de 5000 (ventas al público en general) y en el tercer update calculo las ventas para cuando el numero de cliente es menor o igual a 5000 (ventas internas). Mi duda es la siguiente : Se puede hacer estos calculos en un solo update ? Razón de mi interés en hacer esto: He leido artículos donde se dice que debido a la naturaleza relacional de SQL se debe de tratar de evitar los ciclos o loops y este proceso almacenado tiene uno muy grande y tardado y estoy tratando de simplificarlo empezando por esto.

Voy a tratar de simplificar el codigo:

a)
1
2
3
4
UPDATE tabla_de_totales
    SET ventas_totales
    FROM tablas_desglosadas
   WHERE condicion_de_fecha_y_tienda

b)
1
2
3
4
UPDATE tabla_de_totales
    SET ventas_al_publico
    FROM tablas_desglosadas
   WHERE condicion_de_fecha_y_tienda AND ID_CLIENTE>5000

c)
1
2
3
4
UPDATE tabla_de_totales
    SET ventas_internas
    FROM tablas_desglosadas
   WHERE condicion_de_fecha_y_tienda AND ID_CLIENTE>=5000

Espero haber sido lo suficientemente claro en establecer mi duda.
Gracias de antemano por su atención.

Atentamente
Ing. Roberto Segoviano
León Gto. México
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

un solo update en lugar de 3

Publicado por Isaias (1097 intervenciones) el 18/04/2017 19:25:41
CDMX

Se puede, con un CASE, voy a simplificar el codigo

1
2
3
4
UPDATE tabla_de_totales
SET ventas_totales = SUM(CASE WHEN condicion_de_fecha_y_tienda THEN ventas_totales END),
ventas_al_publico = SUM(CASE WHEN condicion_de_fecha_y_tienda AND ID_CLIENTE>5000 THEN ventas_totales END),
ventas_internas = SUM(CASE WHEN condicion_de_fecha_y_tienda AND ID_CLIENTE>=5000 THEN ventas_totales END)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

un solo update en lugar de 3

Publicado por roberto (9 intervenciones) el 20/04/2017 19:53:59
Estimado Isaias:

Gracias por tu respuesta. No había comentado nada porque estaba haciendo las pruebas correspondientes y verificando resultados.

Tu solución es correcta, muchas gracias. Nunca se me hubiera ocurrido poner una condición en lo que va a sumar y que en base a eso lo sume o no.

Hay mucho por aprender en SQL .

Gracias de nuevo

Roberto Segoviano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad