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

Mostrar meses adeudados

Estas en el tema de Mostrar meses adeudados en el foro de SQL Server en Foros del Web. Hola a todos... Tengo una tabla con las cuotas y los montos: ncuota - mes - monto - año Y después la tabla pagos con ...
  #1 (permalink)  
Antiguo 06/12/2013, 21:47
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Mostrar meses adeudados

Hola a todos...

Tengo una tabla con las cuotas y los montos:

ncuota - mes - monto - año

Y después la tabla pagos con con los siguientes campos.

dni - apenom - ncuota - monto - año

el tema es que necesito generar un reporte con los meses NO PAGADOS o sea los que no figuran en la tabla pagos; por ejemplo puede figurar juan que pago marzo,mayo,junio entonces necesito mostrar abril. Es mas puede que no figure en la tabla de pagos porque no pago nada y necesito mostrar toda la deuda.

Espero me puedan ayudar y haber sido claro.

Saludos
  #2 (permalink)  
Antiguo 06/12/2013, 21:57
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: Mostrar meses adeudados

puedes poner un ejemplo mas claro, ademas de poner algunos datos, otra cosa como sabes cuanto dura la deuda, por ejemplo si juan tiene una deuda de 1000 y no ha pagado que muestras? y como saber hasta donde mostrar los meses en la deuda??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 06/12/2013, 22:26
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Libras gracias por contestar...
Te comento, los meses son del 1 al 12 de marzo a diciembre + dos cuotas de matricula. Bien, el usuario puede pedir los meses adeudados NO NECESITO MOSTRAR MONTO DE DEUDA SOLO LOS MESES. Puede pedir un reporte "desde-hasta" o sea ver deuda de los meses 1 al 3 (o sea marzo,abril,mayo) la persona puede haber pagado todo, algo o nada solo necesito mostrar los meses impagos; por ejemplo si pago marzo mostrar que debe abril y mayo.

Me explico ??? Te repito necesito mostrar meses adeudados ( o sea que no figuran en la tabla pagos, y solo los meses que se deben no los montos ni nada de eso)
  #4 (permalink)  
Antiguo 06/12/2013, 23:59
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: Mostrar meses adeudados

si son los que no aparecen en una tabla con un es mas que suficiente

Código SQL:
Ver original
  1. SELECT * FROM tabla1 AS t1
  2. LEFT JOIN tabla2 AS t2 ON (t1.id=t2.id)
  3. WHERE t2.id IS NULL
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 07/12/2013, 11:23
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Hola libras, gracias por tu respuesta.

Me devuelve el resultado vacio, no me muestra nada. que podra ser ???
  #6 (permalink)  
Antiguo 07/12/2013, 11:40
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: Mostrar meses adeudados

Cita:
Iniciado por cristian_fg Ver Mensaje
...

Me devuelve el resultado vacio, no me muestra nada. que podra ser ???
Que no hay registros en la Tabla 1, que no estén relacionados con la tabla 2.
Tan simple como eso.
Pero no sabemos si estás escribiendo correctamente la consulta.
¿Puedes mostrarnos ejemplos de datos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 07/12/2013, 12:14
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

hola gnzsoloyo... si tan simple como eso.. mira seguramente soy yo...

Cita:
SELECT * FROM pagos AS t1 LEFT JOIN cuotas AS t2 ON (t1.id=t2.id) Where t2.id Is Null
Quiero que me muestre:

juan abril
juan mayo

Interpretando que debe eso dos meses y todos los otros están pagos. En la tabla pagos solo están guardados esos... los pagos.
  #8 (permalink)  
Antiguo 07/12/2013, 13:02
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: Mostrar meses adeudados

Esa no es la sintaxis real de tu consulta.
Según dices en el primer post:
Cita:
Tengo una tabla con las cuotas y los montos:

ncuota - mes - monto - año

Y después la tabla pagos con con los siguientes campos.

dni - apenom - ncuota - monto - año
Po rtanto no coinciden los campos ni los nombres de campos, y no sabemos qué tan bien la escribiste.
Postea la verdadera. La que estás poniendo es el ejemplo de Libras, quiero la real.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 07/12/2013, 13:42
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

gnzsoloyo... es ese.. tambien tengo el campo id en cada tabla, no puse todo para no extenderme y solo lo puse como ejemplo.

probe diferentes opciones tratando de mostrar por el campo ncuota (numero de cuota) pero no logro mostrarlo.
  #10 (permalink)  
Antiguo 07/12/2013, 14:41
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: Mostrar meses adeudados

Postea la sentencia tal y como la escribiste, y tal y como la estás usando.
Evidentemente está mal escrita, si es que dedujimos bien lo que debe estar en la primera tabla. Pero si no lavemos tal y como es, es muy difícil decirte qué hay que arreglarle.

No pongas "ejemplos". Es no sirve. Necesitamos ver la sentencia real. En el "ejemplo" estás omitiendo detalles que parecen ser relevantes al caso.

Cuando no te "extiendes", deformas la realidad. Tenlo presente. Luego, una realidad deformada no sirve para análisis sintáctico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 07/12/2013, 14:48
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Bien gnzsoloyo....
Código SQL:
Ver original
  1. SELECT pagos.apenom, cuotas.mes,
  2. FROM pagos AS t1, cuotas AS t2 LEFT JOIN t2 ON t1.ncuota=t2.ncuota
  3. WHERE t2.ncuota IS NULL

Intento mostrar el apellido y el mes que no pago...

Espero esta vez si haber sido claro.

Última edición por gnzsoloyo; 07/12/2013 a las 14:54
  #12 (permalink)  
Antiguo 07/12/2013, 15:09
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: Mostrar meses adeudados

Bueno, ahora es un poco más clara la cosa, y sí se ve el problema, aunque... sigues poniendo la consulta incompleta.
¿Por qué lo digo? Porque después del último campo hay una coma, cosa que parece mostrar que has tratado de quitar algo
Será bueno que te evites tantas cosas y cuando se te pida algo, lo hagas compelto... Pero bueno...

Volviendo al punto, tu problema es que estás ordenando mal las tablas...
LEFT JOIN devuelve todo lo que está en la primer tabla (a la izquierda) esté o no relacionado con la segunda (a la derecha), por lo que en tu caso estás relacionando los PAGOS con las CUOTAS a pagar, y si hay un pago... siempre habrá una cuota. Por eso no te devuelve nada (y además esa consulta está espantosamente mal escrita).

Este detalle no se ve en realidad a menos que postees el código real, porque en ese "ejemplo", no queda definido cual es una y cual es otra.
¿Entiendes ahora por qué ver la consulta real es importante?

Bueno, en general la cosa es simple: Debes dar vuelta las tablas (o usar RIGHT JOIN, pero no te lo aconsejo, porque en este momento sólo te confudira):

Código SQL:
Ver original
  1. SELECT C.mes, (acá el resto de lo que has omitido)
  2. FROM cuotas C LEFT JOIN pagos P ON C.ncuota=P.ncuota
  3. WHERE P.ncuota IS NULL

Por otro lado, yo veo un serio error de diseño en las tablas, porque el PAGO no tiene por qué llevar los datos del cliente o asociado. Eso debe estar en una tabla aparte y en todo caso debería estar en el plan de cuotas, y no en el de pago, ya que un pago pertenece siempre a la cuota y el de un mismo asociado, por transitividad se obtiene de allí el apellido. Eso implica que hay una relación de dependencia... y que estás haciendo redundancia de información, lo que es peligroso.

Yo la plantearía así, suponiendo que lo que tengas sea una relación entre cuotas a pagar y asociados:

Código SQL:
Ver original
  1. SELECT A.Apellido, C.mes, (acá el resto de lo que has omitido)
  2. FROM asociados A INNER JOIN cuotas C ON A.asocId = C.AsocId
  3. LEFT JOIN pagos P ON C.ncuota=P.ncuota
  4. WHERE P.ncuota IS NULL

Como sea, para ser más preciso necesitaríamos ver el diseño de tablas, pero no viene al caso ahora. Lo que debes tener en cuenta es que cuando usas LEFT JOIN o RIGHT JOIN, el orden de los factores sí altera el producto
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 07/12/2013, 15:19
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Estimado gnzsoloyo... mil gracias por responder...
La verdad es que NO HE OMITIDO NADA... puse lo que tenia, solo quiero mostrar el apellido y el mes que debia. No tengo porque ocultarte el codigo, si me equivoque con el ejemplo anterior, pero en definitiva estoy aca para buscar una solucion.
Solo queria comentarte eso...

Bueno voy a probar el codigo y te comento...

Muchas gracias por el codigo, los consejos y demas. Te mantengo al tanto
  #14 (permalink)  
Antiguo 07/12/2013, 15:27
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: Mostrar meses adeudados

Pos entonces, mejor saca esa coma antes que te haga fallar la consulta...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 07/12/2013, 16:08
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Bien... te comento que me muestra un error...

Abusando de tu generosidad, me podrias enviar un mail asi te envio las tablas directamente y lo ves.... puede ser ??

mi correo es
Cita:
Editado: Violación a las Políticas de Uso

Última edición por gnzsoloyo; 07/12/2013 a las 19:05
  #16 (permalink)  
Antiguo 07/12/2013, 19:07
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: Mostrar meses adeudados

No. Las preguntas son públicas, las respuestas son públicas, y cualquier código o datos relevantes, se postean en el foro.
Si quieres que logremos una solución, postea los datos necesarios aquí.
Y ten en cuenta que las PDU de Foros del Web específicamente dicen que no se deben pedir respuestas por línea privada y menos a correos privados.

volviendo al problema, si te da error, puede ser lo que ya te mencioné, o bien que yo estoy, en el último ejemplo, asumiendo que existen ciertas cosas que puede que no sean así.
Pero, nuevamente, sin ver la sintaxis que intentaste usar, el mensaje de error (que podrías copia y pegar aca), y los datos implicados, no hay mucho que pueda decirte.
Necesitamos ver los detalles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 07/12/2013, 20:12
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar meses adeudados

Muchas gracias por todo gnzsoloyo !!!!!

Etiquetas: meses, tabla
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 18:20.