Oracle - Consulta de exclusión o inclusión

 
Vista:
sin imagen de perfil

Consulta de exclusión o inclusión

Publicado por Elías (2 intervenciones) el 05/11/2014 23:09:25
Hola, amigos:

Tengo un trío de tablas en ORACLE y necesito hacer una consulta sobre las siguientes condiciones.

La tabla 1, Cliente tiene todos los datos de mi cliente, a saber: Id_Cliente, Nombre e Identificacion, cod_estado_serv (baste con eso por ahora ). La tabla 2, Estado del servicio (ID_st_serv, descestserv) y una tercera tabla donde se encuentran las facturas(Cod_clie,Cod_fact,AnoFact,MesFact,montoIVA y montoTotal)

Quiero hacer una consulta que me permita obtener los clientes "activos" que "no" han tenido facturación en los últimos meses.

Entiendo que debería utilizar una subquery, pero honestamente no tengo idea como.

De antemano gracias por sus buenos consejos. Saludos.
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

Consulta de exclusión o inclusión

Publicado por Ramiro (35 intervenciones) el 06/11/2014 14:03:07
Bueno,no se como identificas los clientes activos, supongo que por algún estado particular en "Estado del servicio", pero se me ocurre que podes hacer una consulta así:

SELECT ID_CLIENTE, NOMBRE, COD_ESTADO_SERV, DESCESTSERV
FROM CLIENTE
JOIN ESTADO_SERV
ON(COD_ESTADO_SERV = ID_ST_SERV)
AND DESCESTSERV = 'ACTIVO'
WHERE ID_CLIENTE NOT IN (SELECT COD_CLI FROM FACTURAS);
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

Consulta de exclusión o inclusión

Publicado por luis (235 intervenciones) el 06/11/2014 14:25:57
Seria algo así de simple, ya que no pones los tipos de dato de las columnas de las tablas ni los nombres exactos de las tablas.

Cuando dices "clientes activos que no han tenido facturación en los últimos meses" cuantos meses, 1 mes, 5 meses,24 meses??? Para el ejemplito estoy considerando 3 meses..

Asumo que el código de estado activo de un cliente es '01'.

SELECT a.Id_Cliente, a.nombre, b.descestserv
FROM Cliente a , estado_servicio b
WHERE b.ID_st_serv= a.cod_estado_serv
AND a.ID_st_serv='01' -- estado activo
AND NOT EXISTS (
SELECT 1 FROM facturas y
WHERE y.Cod_clie = a.Cod_clie
AND TO_NUMBER(y.AnoFact||y.MesFact)>=TO_NUMBER(to_char( ADD_MONTHS(SYSDATE,-3),'YYYYMM')) ) ;

Es algo simple espero te ayude.

Saludos

Luis Pablo
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
sin imagen de perfil

Consulta de exclusión o inclusión

Publicado por Ramiro (35 intervenciones) el 06/11/2014 19:51:32
Es buena la opción de Luis, no se me ocurrió esta mañana, es lo que se conoce como subconsulta correlacionada y en este caso es más "performante" que la propuesta por mi, ya que la subconsulta trae menos registros, descontando la parte del where "TO_NUMBER(y.AnoFact||y.MesFact)>=TO_NUMBER(to_char( ADD_MONTHS(SYSDATE,-3),'YYYYMM')) )" que tambien se la podrías agregar a la primera opción.
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