none
Ayuda para hacer filtros usando valores de otra tabla. RRS feed

  • Pregunta

  • Un saludo.

    Mis caracteristicas son las siguientes:

    Tengo un Oracle SQL Developer, la edicion dberia ser 2005-2012, Idioma: Español, Sistema Operativo: Windows 7, Oracle IDE: 3.2.20.9.87, version interna del Main es: -09.87.

    Quiero crear una consulta donde pueda ver a los usuarios que me pidieron un prestamo y me diga si es la primera vez que me piden un prestamo, (o no).

    Pero para saber esto, estoy creando la columna de num_prestamo donde me indica si es la primera vez (o no), que me pide un prestamo a mi.

    Para que yo sepa si un registro de un cliente debe tener un valor de "PRIMER_PRESTAMO", debe cumplir con los siguientes requisitos:

    Nota: los valores entre "" son nombres de los campos de una tabla, yo les digo "columnas".


    1.-Checar si el cliente tiene el "codigo_esp" = '0'

    2.-Checar si el cliente tiene un "estado" = '1'

    3.-Checar si el origen es de "origen_tipo" = 't'

    4.-Checar que su ID_Cliente no concuerde con un ID_Cliente de la tabla (dba.PARAMETROS), donde su valor de la columna "funcionalidad" sea igual al texto = 'REPORTE_EN_ANALISIS'

    5.-Checar que su ID_Cliente no concuerde con un ID_Cliente de la tabla (dba.PARAMETROS), donde su valor de la columna "parametro" NO contenga el texto = 'PRODUCTO_EN_PROCESO



    Si un registro cumple con todo esto, su valor de la columna "num_Prestamo" dbera ser igual al texto = 'PRIMER_PRESTAMO'

    Si un registro NO cumple con todo esto, su valor de la columna "num_Prestamo" dbera ser igual al texto = 'NO_ES_PRIMER_PRESTAMO'


    Conforme a las reglas de arriba, he creado un QUERY base, que contiene errores, que me ayudaria mucho si le dieran algunas correcciones.


    SELECT ID_Cliente, num_Prestamo, Fecha_Creacion,
    Fecha_Conclusion, codigo_esp, estado, origen_tipo
    
    FROM
    dba.disposiciones
    
    WHERE dba.codigo_esp = '0'
    
    AND dba.estado = '1'
    
    AND dba.origen_tipo IN ('t')
    
    CASE 
        (
         WHEN
              (
                  d.ID_Cliente= p.ID_Cliente
                  AND p.funcionalidad = 'REPORTE_EN_ANALISIS'
                  AND p.parametro LIKE '%PRODUCTO_PROCESOS_CREDITO%'
    
              )  
    
         THEN num_Prestamo = 'PRIMER_PRESTAMO'
         ELSE num_Prestamo = 'NO_ES_PRIMER_PRESTAMO'

    Cualquier pregunta por favor hacerla saber he intentare responder lo mas rápido que pueda.

    Gracias.

    jueves, 12 de abril de 2018 19:28

Todas las respuestas

  • Hola Orybos:

    Un posible planteamiento para esto puede ser así:

    SELECT A.ID_Cliente, 
    	CASE WHEN D.ID_CLIENTE IS NULL THEN 'PRIMER PRESTAMO' ELSE 'NO ES PRIMER PRESTAMO' END AS NUM_PRESTAMO
    		, A.Fecha_Creacion,
    		A.Fecha_Conclusion, A.codigo_esp, A.estado, A.origen_tipo 
    	FROM DISPOSICIONES AS A /* DATOS DE DISPOSICIONES*/
    	LEFT JOIN ( 
    
    
    		SELECT d.ID_Cliente
    	
    			FROM
    				disposiciones as d /*ALIAS DE TABLA */
    
    			WHERE d.codigo_esp = '0' /* solo es valido si el campo es varchar2 o similar */
    
    			AND d.estado = '1'/* solo es valido si el campo es varchar2 o similar */
    
    			AND d.origen_tipo = 't'/*NO HACE FALTA LA CLAUSULA IN */
    
    			and d.id_cliente not in (select p.id_cliente from parametros as p
    									 where p.funcionalidad = 'REPORTE_EN_ANALISIS' or 
    									 p.parametro not like '%PRODUCTO_PROCESOS_CREDITO%'
    									 )
    		
    		) AS B ON A.ID_CLIENTE = B.ID_CLIENTE OR B.ID_CLIENTE IS NULL /*RELACION IZQUIERDA PARA LOS REGISTROS DE DISPOSICIONES*/
    		/*SI NO HAY DISPOSICIONES, PORQUE CLIENTE NO CUMPLE REQUISITOS EN CONJUNTO DE DATOS B ENTONCES QUIERE DECIR QUE NO ES CLIENTE.
    		*/

    Espero te sirva de apoyo.

    Un saludo

    jueves, 12 de abril de 2018 20:45
  • Muchas Gracias por tu comentario Javi Fernandez, me ha ayudado, pero me quedan un par de dudas.

    En la sección 

    SELECT A.ID_Cliente, 
    	CASE WHEN D.ID_CLIENTE IS NULL THEN

     ¿Se supone que hiba un el alias A en vez de D con ID_CLIENTE? pues no veo de donde sacas el alias D para ese lugar.

    En segundo lugar.



    Mi SQL me manda un mensaje de error como sigue:

    ERRO: ORA-00923 Palabra cable FROM no encontrada donde se esperaba.

    Error: Linea 2, columna 75

    ¿Esto podría ser a causa de mi instalacción (o versión), de SQL?

    viernes, 13 de abril de 2018 20:15
  • Hola:

    Perdon es B.ID_CLIENTE.

    D es cuando el motor esta evaluando la expresión dentro de los parentesis, al salir el conjunto de resultados retorna como B

    Saludos

    sábado, 14 de abril de 2018 5:43