Ver Mensaje Individual
  #3 (permalink)  
Antiguo 25/02/2012, 04:46
beyrouty
 
Fecha de Ingreso: febrero-2012
Mensajes: 4
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Como condicionar SUM en procedimiento almacenado

Cita:
Iniciado por matanga Ver Mensaje
Para actualizar una tabla en función de los valores de otra tabla tienes la sintaxis update from, por ejemplo:

Código:
update clientes 
  set cl_estatus = 2
from (
 select 
  ventas_generales.vg_cte 
 from 
  ventas_generales inner join ventas_det
   on ventas_generales.vg_folio =  ventas_det.vd_folio
 group by ventas_generales.vg_cte
 having sum(ventas_det.vd_precio * ventas_det.vd_cant) > 500
) t
where clientes.cte = t.vg_cte
Saludos
Muchas gracias por tu respuesta! te comento que mientras intentaba buscar una solucion hice algo similar a lo que me acabas de dar... solo que primera vez que veo el HAVING con el SUM, así me quedo ayer :

USE VENTAS
GO
ALTER PROCEDURE SP_VENTAS2
@OPCION AS TINYINT

AS
BEGIN
IF (@OPCION=1)
BEGIN
IF (SUM (vd_precio * vd_cant > 500)
BEGIN
UPDATE clientes SET cl_estatus=2 from ventas_generales
INNER JOIN clientes ON vg_cte = cl_cve
INNER JOIN ventas_det ON vg_folio = vd_folio
WHERE cl_estatus=1 and SUM (vd_precio * vd_cant)>500
END
END
ELSE
BEGIN
SELECT ('Valor fuera de rango') as Mensaje
END
END


me sigue saliendo el error :

Mens 102, Nivel 15, Estado 1, Procedimiento SP_VENTAS2, Línea 8
Sintaxis incorrecta cerca de '>'.

osea me marca error en "IF (SUM (vd_precio * vd_cant > 500)" ... segun yo, primero debo poner esa condicion, si las ventas totales de todos los clientes es mayor a 500 entonces se hara el update, si no es pues no actualiza el estatus del cliente, estoy retrasada por esa sintaxis incorrecta.

acabo de poner lo del having sum...

USE VENTAS
GO
ALTER PROCEDURE SP_VENTAS2
@OPCION AS TINYINT

AS
BEGIN
IF (@OPCION=1)
BEGIN
IF (HAVING SUM (vd_precio * vd_cant)>500 )
BEGIN
UPDATE clientes SET cl_estatus=2 from ventas_generales
INNER JOIN clientes ON vg_cte = cl_cve
INNER JOIN ventas_det ON vg_folio = vd_folio
WHERE cl_estatus=1 and HAVING SUM (vd_precio * vd_cant)>500
END
END
ELSE
BEGIN
SELECT ('Valor fuera de rango') as Mensaje
END
END




me sale esto :

Mens 156, Nivel 15, Estado 1, Procedimiento SP_VENTAS2, Línea 8
Sintaxis incorrecta cerca de la palabra clave 'HAVING'.
Mens 156, Nivel 15, Estado 1, Procedimiento SP_VENTAS2, Línea 13
Sintaxis incorrecta cerca de la palabra clave 'HAVING'.


... Perdonen la molestía con esto, me agrada mucho mysql y lo que se relaciona con base de datos, tal vez esto sea algo muy facil pero, se me ha complicado un poco esto, no había tenido problemas hasta ahora..