Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

buscar los contratos que no tengan ciertos codigos activos

Estas en el tema de buscar los contratos que no tengan ciertos codigos activos en el foro de Oracle en Foros del Web. Buenos días; tengo una tabla con # de contratos, los contratos tienen varios servicios activos ejemplo contrato servicio 234 2505 234 321 567 101 576 ...
  #1 (permalink)  
Antiguo 27/03/2017, 06:57
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Mensaje buscar los contratos que no tengan ciertos codigos activos

Buenos días;

tengo una tabla con # de contratos, los contratos tienen varios servicios activos

ejemplo

contrato servicio
234 2505
234 321
567 101
576 8943
567 8635

Quisero extraer aquellos contratos que No posean algunos de los servicios del tipo (101,7505) , es decir, para el ejemplo adjunto la respuesta de la consulta solo debería traerme el contrato 234 porque el 567 ya tiene el 101, es decir, ya tiene uno de los servicios.

como podría consulta esto?
  #2 (permalink)  
Antiguo 28/03/2017, 06:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: buscar los contratos que no tengan ciertos codigos activos

Cita:
como podría consulta esto?


Con un WHERE...

Postea lo que estás intentando, porque tu problema es demasiado básico para que no puedas hacerlo. Si no te sale es porque alguna condición de tu query es incorrecta o no es suficientemente discriminante.
Pero sin VER lo que haces es difícil saber lo que no está bien.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/03/2017, 11:58
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: buscar los contratos que no tengan ciertos codigos activos

no creo que funcione con un where porque si en este caso

contrato - servicio
123 - 101
123 - 3456
123 - 3409

si yo le digo :
Código SQL:
Ver original
  1. SELECT * FROM contratos WHERE codigo_servicio NOT IN (101)

me va a traer como resultado el contrato 123 -3456 y el 123-3409 y para mi el ya tener el servicio 101 dentro de su histórico lo convierte en un dato basura.

o le estoy dando una visión equivoca de cuando dices usar un WHERE?
  #4 (permalink)  
Antiguo 29/03/2017, 08:06
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: buscar los contratos que no tengan ciertos codigos activos

Podría ser así:

Código SQL:
Ver original
  1. SELECT *FROM contratos WHERE contrato NOT IN(SELECT contrato FROM contratos WHERE codigo_servicio IN(101,7505));

Sin embargo, te recomiendo revises bien el rendimiento de la consulta y si hace uso de los indices correctos en el plan de ejecución. Yo como DBA le tengo miedo a consultas con IN en tablas grandes.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 29/03/2017, 12:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: buscar los contratos que no tengan ciertos codigos activos

Como te muestra huesos52, la cosa para por hacer un WHERE adecuado al caso específico. Lo que debe contener es las N condiciones necesarias para que incluya ciertos casos y excluya los otros.
Tomando el ejemplo de Huesos52, se lo podría plantear también así:

Código SQL:
Ver original
  1. SELECT *
  2. FROM contratos C
  3. WHERE NOT EXISTS
  4.     (SELECT DISTINCT contrato C2 FROM contratos WHERE C2.contrato = C.contrato  
  5.     AND codigo_servicio NOT IN(101, 7505)
  6.    AND ROWNUM = 1
  7. );
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/04/2017, 13:16
Avatar de mager3  
Fecha de Ingreso: junio-2012
Ubicación: Medellin
Mensajes: 318
Antigüedad: 11 años, 10 meses
Puntos: 4
Respuesta: buscar los contratos que no tengan ciertos codigos activos

Muchas gracias a los dos...

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:35.