Ver Mensaje Individual
  #1  
Antiguo 26-01-2023
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Reputación: 14
novato_erick Va por buen camino
Lightbulb duda: aritmetica en procedimiento en Firebird

Hola Chicos cómo esta?

Estoy realizando algunas consultas la cual me muestra total de ventas de la tabla FACTURA_VENTAS por mes la cual no tengo ningún problema sin embargo me solicitaron que mostrara un campo la cual muestre el crecimiento tanto en monto como en porcentaje.

Mi duda es cual sería la mejor manera aprovechando el procedimiento almacenado de total de ventas por mes para traer información cómo por ejemplo:

Código:
se obtiene de:                   (MAC - MA)                (MC / M) * 100
MES              MONTO      MONTO_CRECIMIENTO     CRECIMIENTO_PORC
ENERO        27457.00           27457.00                    100%
FEBRERO    28987.57             1500.57                    5.18%
MARZO       30211.21             1223.67                    4.05%
MAC= MES ACTUAL
MA= MES ANTERIOR
MC= MONTO CRECIMIENTO
M= MONTO

¿Será posible efectuar este tipo de Artimetica en Firebird o recomiendan alguna otra solución?

Aquí muestro parte de mi procedimiento
Código SQL [-]
CREATE PROCEDURE VENTAS_CRECE_POR_MESCONTADO(
  ANIO SMALLINT)
RETURNS(
  NOMBREMES VARCHAR(25),
  MONTO_VENTAS TYPE OF COLUMN FACTURAS_VENTAS.MONTOTOTAL,
  CRECIMIENTO NUMERIC(12, 2))
AS
DECLARE VARIABLE LNI SMALLINT;
DECLARE VARIABLE MONTO_TOTALNC NUMERIC(12, 2);
DECLARE VARIABLE MONTO_CRECIMIENTO NUMERIC(12, 2);
BEGIN
   MONTO_CRECIMIENTO = 0;
   CRECIMIENTO = 0;  
   lnI = 1;
   WHILE (lnI <= 12) DO
   BEGIN
      NOMBREMES = DECODE(lnI,  1, 'ENE',  2, 'FEB',  3, 'MAR',  4, 'ABR',  5, 'MAY',  6, 'JUN',
                                  7, 'JUL',  8, 'AGO',  9, 'SEP', 10, 'OCT', 11, 'NOV', 12, 'DIC');
      MONTO_VENTAS = (SELECT
                     SUM(FACTURAS_VENTAS.MONTOTOTAL)
                  FROM FACTURAS_VENTAS
                  WHERE EXTRACT(MONTH FROM FACTURAS_VENTAS.FECHA) = :lnI AND
                     EXTRACT(YEAR FROM FACTURAS_VENTAS.FECHA) = :ANIO);
      MONTO_TOTALNC = (select coalesce(SUM(NOTAS_CREDITOS.IMPORTE_TOTAL), 0)
                  FROM NOTAS_CREDITOS                   
                  Where  EXTRACT(MONTH FROM NOTAS_CREDITOS.FECHA_ACTUAL) = :lnI AND
                  EXTRACT(YEAR FROM NOTAS_CREDITOS.FECHA_ACTUAL) = :ANIO);                         
      MONTO_VENTAS = COALESCE(MONTO_VENTAS, 0.00);     
      MONTO_VENTAS = (MONTO_VENTAS - COALESCE(MONTO_TOTALNC, 0.00));
      /*Los expertos pueden colaborarme con  ya que al hacer el recorrido no es posible tomar el mes actual para ser restado al mes anterior y así sucesivamente:*/
      SUSPEND;                
      lnI = lnI + 1;
   END

 END;

Saludos;

novatoerick.
Responder Con Cita