entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

ayuda con lógica para query

buen día , tengo un rato tratando de ingeniarmela para un query pero no doy una.
estoy trabajando con un reporte de historial crediticio, donde se catalogara a un cliente dependiendo de las siguientes reglas

     si la fecha de pago es mayor a 31 días  irrecuperable   --- ROJO
 si la fecha de pago esta entre 7 a 30 días y cubre el pago mínimo es pago deficiente  --- AMARILLO
 si la fecha de pago es menor o igual a 7 días y cubre el pago mínimo es pago normal.   --- VERDE

Tengo dos tablas
1.- Cuenta, PagoMinimo, FechaCorte,FechaLimitePago
2.- Cuenta, FechaPago, Importe

Un ejemplo para que explicar mejor mi problema

PagoMinimo | FechaCorte | FechaLimitePago PagoRealizado
100.00 | 2016-01-18 | 2016-02-17
100.00 | 2016-02-18 | 2016-03-17
100.00 | 2016-03-18 | 2016-04-17
100.00 | 2016-04-18 | 2016-05-17

FechaPago | Importe
2016-03-25 | 200.00
2016-04-21 | 50.00
2016-04-22 | 50.00

necesito comparar la tabla dos con la tabla uno de uno a muchos, el resultado final debería de ser

PagoMinimo | FechaCorte | FechaLimitePago| PagoRealizado
100.00 | 2016-01-18 | 2016-02-17 | Rojo
100.00 | 2016-02-18 | 2016-03-17 | Amarillo
100.00 | 2016-03-18 | 2016-04-17 | Verde
100.00 | 2016-04-18 | 2016-05-17 | Verde

he tratado de hacer algunas comparaciones pero no doy una... y lo más revuelto es que tengo que comparar que la fecha del pago haya caído entre la fechaCorte-FechaLimitePago o comparar los días de diferencia entre la fechaLimitePago del corte más cercando a la fecha del pago

alguna idea?

-- Edite la pregunta ya que me tope con otro ejemplo

no había tomado en cuenta que el cliente puede pagar en dos partes el pago mínimo dentro del rango de la fecha de corte

0voto

bl4z3r comentado

¿No tienes alguna consulta de sql con la cual estés trabajando?

1 Respuesta

3votos

Buenas, por fin pude llegar al resultado que esperaba

insert into @tempCategoria1  (idResumenCuenta,MontoPagado,DiasDif)
            select idResumenCuenta,SUM(s.IMPORTEATP),null from @tempSaldoCuenta s
            inner join @tempResumenCuenta r on r.PAN = s.PAN
            where s.FEC_MOVTO between r.FechaCorte and r.FechaLimitePago group by idResumenCuenta

-- En este insert , inserto los pagos que fueron registrados dentro del corte


insert into @tempCategoria2  (idResumenCuenta,MontoPagado,DiasDif)
            select idResumenCuenta,SUM(s.IMPORTEATP),1  from @tempSaldoCuenta s
            inner join @tempResumenCuenta r on r.PAN = s.PAN
            where DATEDIFF(day,r.FechaLimitePago , s.FEC_MOVTO ) >= 7 and DATEDIFF(day,r.FechaLimitePago , s.FEC_MOVTO ) <= 30
            group by idResumenCuenta

-- en este insert , inserto los pagos "amarillos" o subnormales que fueron echos despues del corte con retraso de 7 a 30 días

Despues hago dos updates a mi tabla padre donde concentro el historial del cliente


            UPDATE
    @tempResumenCuenta 
SET

   t1.MontoPagado = isnull(t1.MontoPagado,0.00) + t2.MontoPagado
FROM
     @tempResumenCuenta t1
INNER JOIN
    @tempCategoria1 t2
ON
    t1.idResumenCuenta = t2.idResumenCuenta

            UPDATE
    @tempResumenCuenta 
SET
    t1.MontoPagado = t2.MontoPagado ,   
    t1.DiasDif = t2.DiasDif
FROM
     @tempResumenCuenta t1
INNER JOIN
    @tempCategoria2 t2
ON
    t1.idResumenCuenta = t2.idResumenCuenta

y por ultimo con un case sencillo obtengo el resultado que quería

select (CONVERT(VARCHAR(10),FechaCorte,110) + ' a ' + CONVERT(VARCHAR(10),FechaLimitePago,110)) Periodo, 
        SaldoCorte, PagoMinimo, PagoExigible,PagoNoIntereses,CONVERT(VARCHAR(10),FechaLimitePago,110) FechaLimitePago, 
        case 
        when (MontoPagado >= PagoMinimo) and DiasDif is null 
        then 'Verde'
        when (MontoPagado >= PagoMinimo) and DiasDif is not null
        then 'Amarillo' 
        else
        'Rojo'
    end
         PagoRealizado
        from @tempResumenCuenta

aún sigo trabajando en el query ya que estoy simulando los pagos de diferentes clientes y puede que me encuentre con otra cosa, pero hasta ahora creo que la lógica ya la estoy armando bien, si hay alguna observación y gustan ayudarme con gusto tomare sus comentarios.
Gracias

saludos y buen día!

0voto

Peter comentado

Gracias por compartir la solución!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta