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

Detener con un flag el patron de una consulta

Estas en el tema de Detener con un flag el patron de una consulta en el foro de SQL Server en Foros del Web. Hola, Con un Left Join obtengo el siguiente resultado @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original Cod_Usuario     Cod_prestamo            Fecha_SPP ...
  #1 (permalink)  
Antiguo 14/01/2015, 14:23
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Detener con un flag el patron de una consulta

Hola,

Con un Left Join obtengo el siguiente resultado

Código SQL:
Ver original
  1. Cod_Usuario     Cod_prestamo            Fecha_SPP   Fecha_Efectiva  Nro_Cuota   Tipo_Pago
  2. 0705MHY1812951  0705-256-01-06-00249    2014-06-02  2014-08-10      1               P
  3. 0705MHY1812951  0705-256-01-06-00249    2014-07-02  2014-08-10      2               P
  4. 0705MHY1812951  0705-256-01-06-00249    2014-08-04  2014-08-10      3               C
  5. 0705MHY1812951  0705-256-01-06-00249    NULL         NULL        NULL               NULL
  6. 0705MHY1812951  0705-256-01-06-00249    NULL         NULL        NULL               NULL
  7. 0705MHY1812951  0705-256-01-06-00249    NULL         NULL        NULL               NULL

el caso es que necesito detener el patron en el registro tres, es decir, que cuando se identifique el tipo de pago C este sea el ultimo registro a mostrar y el resto no lo debería mostrar.

Es posible me digan no uses LEFT JOIN, el problema es que esto se hará únicamente cuando exista el flag "C" para los "P" debería seguir detectando los NULL.

Alguna idea de que puedo hacer?
  #2 (permalink)  
Antiguo 14/01/2015, 14:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Detener con un flag el patron de una consulta

un ejemplo de como estan tus datos ayudaria con eso que presentas te podria decir que con que incluyas en la clausula

Código SQL:
Ver original
  1. WHERE Fecha_SPP  IS NOT NULL AND Fecha_Efectiva IS NOT NULL  AND Nro_Cuota IS NOT NULL AND   Tipo_Pago IS NOT NULL
seria suficiente....pero no se como estan originalmente los datos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/01/2015, 15:55
 
Fecha de Ingreso: enero-2010
Mensajes: 491
Antigüedad: 14 años, 3 meses
Puntos: 12
Respuesta: Detener con un flag el patron de una consulta

claro que si, sin embargo había comentado que únicamente cuando el último registro sea "C" el patron debe ser abandonado (el abadonar no significa que debe terminar la consulta únicamente debe saltar la consulta del cod_prestamo y cod_usuario)

Código SQL:
Ver original
  1. SELECT Cod_usuario,Cod_Prestamo FROM ArchivoSocias WHERE Cod_Usuario = '0101LCE3003911' AND Cod_Prestamo = '0101-259-01-07-00016'
  2. SELECT Cod_Prestamo,Fecha_Pago,Nro_Cuota FROM Fechas_Pago WHERE Cod_Prestamo = '0101-259-01-07-00016'
  3. SELECT Cod_Usuario,Cod_prestamo,Fecha_SPP,Fecha_Efectiva,Nro_Cuota,Tipo_Pago FROM ArchivoPS WHERE Cod_Usuario = '0101LCE3003911' AND Cod_Prestamo = '0101-259-01-07-00016'

para obtener lo que quiero uso tres tablas que como resultado tengo lo siguiente
Código SQL:
Ver original
  1. Cod_usuario Cod_Prestamo
  2. 0101LCE3003911  0101-259-01-07-00016
Código SQL:
Ver original
  1. Cod_Prestamo    Fecha_Pago  Nro_Cuota
  2. 0101-259-01-07-00016    2014-06-06 00:00:00.000 1
  3. 0101-259-01-07-00016    2014-07-04 00:00:00.000 2
  4. 0101-259-01-07-00016    2014-08-01 00:00:00.000 3
  5. 0101-259-01-07-00016    2014-08-29 00:00:00.000 4
  6. 0101-259-01-07-00016    2014-09-26 00:00:00.000 5
  7. 0101-259-01-07-00016    2014-10-24 00:00:00.000 6
Código SQL:
Ver original
  1. Cod_Usuario Cod_prestamo    Fecha_SPP   Fecha_Efectiva  Nro_Cuota   Tipo_Pago
  2. 0101LCE3003911  0101-259-01-07-00016    2014-06-06 00:00:00.000 2014-06-06 00:00:00.000 1   P
  3. 0101LCE3003911  0101-259-01-07-00016    2014-07-04 00:00:00.000 2014-08-30 00:00:00.000 2   P
  4. 0101LCE3003911  0101-259-01-07-00016    2014-08-01 00:00:00.000 2014-08-30 00:00:00.000 3   P
  5. 0101LCE3003911  0101-259-01-07-00016    2014-08-29 00:00:00.000 2014-08-30 00:00:00.000 4   C

y mi consulta final sería:
Código SQL:
Ver original
  1. SELECT aux.Cod_Usuario,aux.Cod_Prestamo,aux.Fecha_Pago,aux.Nro_Cuota,a.Fecha_Efectiva,a.Tipo_Pago
  2. FROM (SELECT aso.Cod_Regional, aso.Cod_usuario,aso.Cod_prestamo,p.Fecha_Pago,p.Nro_Cuota
  3. FROM Fechas_Pago p JOIN ArchivoSocias aso ON (p.Cod_Prestamo = aso.Cod_Prestamo)
  4. WHERE
  5.  aso.Prima > 0 ) AS aux
  6. LEFT JOIN ArchivoPS a
  7. ON (aux.Cod_Prestamo = a.Cod_prestamo AND aux.Cod_Usuario = a.Cod_Usuario AND aux.Nro_Cuota = a.Nro_Cuota)
  8. WHERE
  9.     aux.Cod_Usuario IN ('0101LCE3003911')
  10. ORDER BY aux.Cod_Prestamo

el resultado:
Código SQL:
Ver original
  1. Cod_Usuario Cod_Prestamo    Fecha_Pago  Nro_Cuota   Fecha_Efectiva  Tipo_Pago
  2. 0101LCE3003911  0101-259-01-07-00016        2014-06-06 00:00:00.000 1   2014-06-06 00:00:00.000 P
  3. 0101LCE3003911  0101-259-01-07-00016        2014-07-04 00:00:00.000 2   2014-08-30 00:00:00.000 P
  4. 0101LCE3003911  0101-259-01-07-00016        2014-08-01 00:00:00.000 3   2014-08-30 00:00:00.000 P
  5. 0101LCE3003911  0101-259-01-07-00016        2014-08-29 00:00:00.000 4   2014-08-30 00:00:00.000 C
  6. 0101LCE3003911  0101-259-01-07-00016        2014-09-26 00:00:00.000 5   NULL    NULL
  7. 0101LCE3003911  0101-259-01-07-00016        2014-10-24 00:00:00.000 6   NULL    NULL

En este caso como el registro 4 tiene en la columna Tipo_Pago = "C" no debe mostrar los registros 5 y 6. Pero si Tipo_Pago fuera "P" debería mostrar los registros

Etiquetas: detener, join, patron, siguiente
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 09:56.