Oracle - CASE con funcion de grupo (SUM) ELSE que salga 0

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 14 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

CASE con funcion de grupo (SUM) ELSE que salga 0

Publicado por mario (1 intervención) el 23/03/2019 04:29:41
El tema es, tengo una consulta extensa en ella trato de ingresar datos a una tabla nueva consultado a diferentes tablas pero que vaya insertando fila por fila, lo estoy haciendo con bloques simples anonimos(PL/SQL) y variables BIND.

El problema ocurre porque tengo que agregar los datos dependiendo de la fecha pero si lo hago con WHERE, no me van a ingresar algunos datos.

ej: La tabla VENDEDOR tiene (cod_vendedor, numrut_vendedor) ; y está unida a la tabla BOLETA que tiene (num_boleta, cod_vendedor, fecha_boleta) ; por otro lado esta la tabla COMISION que tiene (num_boleta, valor_comision).

Hay que llenar la tabla HABERES_VENDEDOR que tiene (cod_vendedor, numrut_vendedor, fecha_proceso, comision_vendedor) ..

fecha_proceso = 02/2019

Hay que sumar la comisión del vendedor, de las boletas que estén dentro de la fecha del proceso, pero si este no vendió nada en esa fecha hay que ponerle 0 a la comisión. la idea es que se ingresen los datos aunque no haya vendido nada.

Pensaba en un CASE pero no me resulto.

Como lo harían?.. Como lo agruparían?..
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CASE con funcion de grupo (SUM) ELSE que salga 0

Publicado por Rafael (328 intervenciones) el 26/03/2019 13:15:03
Hola

Supongo que fecha de proceso es solo el mes....
Lo que entiendo entonces que no sabes cuando inicia (esto es una tonteria por que todos los meses empiezan por 1
Y tampoco sabes cuando termina...

Pero hay un truco si un texto de mes y año, lo conviertes en fecha asume que es el dia 1
Y luego la funcion LAST_DAY te devuelve el ultimo dia del mes de la fecha dada....

Asi pues podrias probar algo como esto:

1
2
3
4
5
6
7
8
9
10
INSERT INTO HABERES_VENDEDOR
SELECT V.cod_vendedor
     , V.numrut_vendedor
     , '02/2019' fecha_proceso
     , NVL(SELECT SUM(valor_comision)
           FROM   COMISION C
                  JOIN BOLETA B ON C.num_boleta = B.num_boleta
           WHERE  B.cod_vendedor = V.cod_vendedor
           AND    B.fecha_boleta BETWEEN TRUNC(TO_DATE('02/2019', 'MM/YYYY')) AND LAST_DAY(TO_DATE('02/2019', 'MM/YYYY')), 0) comision_vendedor
FROM   VENDEDOR V

Cuentanos como te ha ido...
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