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

Mostrar Inexistentes LEFT JOIN

Estas en el tema de Mostrar Inexistentes LEFT JOIN en el foro de SQL Server en Foros del Web. Hola estoy tratando pagos inexistentes... ncuota es el numero de cuota va del 1 al 12 según el mes siendo 1 el mes de marzo ...
  #1 (permalink)  
Antiguo 10/12/2013, 08:12
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Mostrar Inexistentes LEFT JOIN

Hola estoy tratando pagos inexistentes...

ncuota es el numero de cuota va del 1 al 12 según el mes siendo 1 el mes de marzo hasta diciembre y los numero 11 y 12 las respectivas matriculas para el siguiente año. Esta es la tabla cuota que tiene solo 12 registros con los siguientes campos:

id-ncuota-mes-primonto-prifecha-segmonto-segfecha-año

bien una tabla de pagos donde se almacenan los pagos realizados con los siguientes campos:

id-dni-apenom-ncuota-monto-fechapago

y hay una tabla alumnos con todos los datos de cada uno.

ahora bien, en la tabla pagos se almacen justamente eso los pagos: por ejemplo si Juan pago marzo,abril y julio esos 3 registros estan en la tabla pagos, entonces necesito un reporte que diga: juan mayo - junio (o sea esos registros no estan porque no se pagaron, necesito eso mostrar los meses que se deben)

No se si fui claro. Estaba intentando algo asi pero no va.

Cita:
SELECT t2.apenom, t1.mes, t1.ncuota FROM cuotas as t1 LEFT JOIN pagos as t2 ON t1.ncuota=t2.ncuota Where t2.ncuota Is Null
Alguna Idea ???
Gracias
  #2 (permalink)  
Antiguo 10/12/2013, 08:17
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 Inexistentes LEFT JOIN

un pequeño ejemplo de tus datos por favor? si no va a ser dificil ayudarte...

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 10/12/2013, 08:28
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

Hola libras.... gracias por responder...

A que te refieres exactamente con ejemplos ??

Di un ejemplo y que funcion cada tabla, pero si necesitas alguna explicacion mas especifica dime bien que para saber asi soy mas especifico a la hora de preguntar

espero tu respuesta..
gracias
  #4 (permalink)  
Antiguo 10/12/2013, 10:40
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 Inexistentes LEFT JOIN

un ejemplo de tus datos es esto:

tabla1
dato1 dato2 datoN
valor1 valor2 valorN
valor1 valor2 valorN

tabla2
dato1 dato2 datoN
valor1 valor2 valorN
valor1 valor2 valorN

La relacion de las tablas es por dato1...

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 10/12/2013, 11:16
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

ahhh okok ahora si... bien

CUOTAS:

id ncuota mes primonto prifecha segmonto segfecha año
1 1 MARZO 200 10/03/2013 220 20/03/2013 2013
2 2 ABRIL 200 10/04/2013 220 20/04/2013 2013
3 3 MAYO 200 10/05/2013 220 20/05/2013 2013
4 4 JUNIO 200 10/06/2013 220 20/06/2013 2013

PAGOS

id dni apenom ncuota monto fechapago
1 20258741 JUAN 1 200 15/03/2013
2 20258741 JUAN 4 200 15/06/2013

ALUMNOS
id dni apenom domicilio telefono curso division ....
1 20258741 JUAN xxx xxx xx xx
2 27413413 LUIS xxx xxx xx xx


EN EL EJEMPLO JUAN PAGO LA CUOTA 1 Y 4 O SEA QUE DEBE LA 2 y 3... NECESITO MOSTRAR ESO, LAS DEUDAS. PERO TAMBIEN PUEDE QUE ALGUNO (LUIS) NO FIGURE EN LA TABLA PAGOS PORQUE NADA PAGO. O SEA NECESITO MOSTRAR MESES QUE DEBE CADA UNO.

ESPERO AHORA SI HABER SIDO CLARO...SINO ME PREGUNTAS.

SALUDOS Y GRACIAS
  #6 (permalink)  
Antiguo 10/12/2013, 12:00
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 Inexistentes LEFT JOIN

ahora si me hizo pensar esta consulta :P pero aqui esta el resultado

Código SQL:
Ver original
  1. CREATE TABLE #cuotas
  2. (
  3. id INT,
  4. ncuota INT,
  5. mes VARCHAR(20),
  6. total INT
  7. )
  8.  
  9.  
  10. INSERT INTO #cuotas VALUES (1,1,'MARZO',200)
  11. INSERT INTO #cuotas VALUES (2,2,'ABRIL',200)
  12. INSERT INTO #cuotas VALUES (3,3,'MAYO',200)
  13. INSERT INTO #cuotas VALUES (4,4,'JUNIO',200)
  14.  
  15. CREATE TABLE #pagos
  16. (
  17. id INT,
  18. dni INT,
  19. apenom VARCHAR(20),
  20. ncuota INT,
  21. total INT
  22. )
  23.  
  24. INSERT INTO #pagos VALUES (1,20258741,'JUAN',1,200)
  25. INSERT INTO #pagos VALUES (2,20258741,'JUAN',4,200)
  26. INSERT INTO #pagos VALUES (3,27413413,'LUIS',3,200)
  27.  
  28. CREATE TABLE #alumnos
  29. (
  30. id INT,
  31. dni INT,
  32. apenom VARCHAR(20)
  33. )
  34. INSERT INTO #alumnos VALUES (1,20258741,'JUAN')
  35. INSERT INTO #alumnos VALUES (2,27413413,'LUIS')
  36. INSERT INTO #alumnos VALUES (3,27413414,'Libras')
  37.  
  38.  
  39.  
  40. SELECT mes,#alumnos.apenom FROM #cuotas,#alumnos
  41. WHERE mes + #alumnos.apenom NOT IN (
  42. SELECT t1.mes + t2.apenom FROM #cuotas AS t1
  43. LEFT JOIN #pagos AS t2 ON (t1.ncuota=t2.ncuota)
  44. WHERE apenom IS NOT NULL
  45. )

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 10/12/2013, 12:29
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

hola Libras... te hice pensar me parece... la verdad que te agradezco y mucho porque me ha funcionado perfectamente... REALMENTE TE LO AGRADEZCO....

Abuzando de tu generosidad.. te hago una ultima consulta:

donde pondria un desde hasta ?? te explico si el reporte lo piden en Junio obviamente que de julio en adelante va a figurar que no pago pero es porque todavia no vencio... donde podrian el filtro para poder por ejemplo quien debe pero desde la cuota 1 a la 5...

PERDON... SI NO PODES NO HAY PROBLEMAS DE TODAS FORMAS MIL GRACIAS POR LA AYUDA ES MUYY VALIOSA.

SALUDOS
  #8 (permalink)  
Antiguo 10/12/2013, 12:41
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 Inexistentes LEFT JOIN

Cita:
Iniciado por cristian_fg Ver Mensaje
PERDON... SI NO PODES NO HAY PROBLEMAS DE TODAS FORMAS MIL GRACIAS POR LA AYUDA ES MUYY VALIOSA.

SALUDOS
Demostrando que si puedo ;)

Código SQL:
Ver original
  1. SELECT mes,#alumnos.apenom FROM #cuotas,#alumnos
  2. WHERE mes + #alumnos.apenom NOT IN (
  3. SELECT t1.mes + t2.apenom FROM #cuotas AS t1
  4. LEFT JOIN #pagos AS t2 ON (t1.ncuota=t2.ncuota)
  5. WHERE apenom IS NOT NULL
  6. ) AND #cuotas.ncuota BETWEEN 1 AND 3
  7. ORDER BY apenom



saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 10/12/2013, 13:02
 
Fecha de Ingreso: noviembre-2013
Ubicación: Nuevo Leon
Mensajes: 70
Antigüedad: 10 años, 5 meses
Puntos: 2
Respuesta: Mostrar Inexistentes LEFT JOIN

Pero si Libras es un genio
__________________
Buen dia.
Jessy Rmz.
No seas como el caminante del desierto que sólo deja una huella; el conocimiento se alcanza con el tiempo y unas cuantas lunas.
  #10 (permalink)  
Antiguo 10/12/2013, 14:43
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

jajaja ya lo creo.... perfecto Libras.. genio....

No solo basta con ser genio..... lo bueno es saber y como en este caso dar una mano !!!

MIL GRACIAS !!!!!!!!!!!!!!!!!!!
  #11 (permalink)  
Antiguo 10/12/2013, 16:05
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Mostrar Inexistentes LEFT JOIN

Libras para presidente de la republica !!!!
__________________
MCTS Isaias Islas
  #12 (permalink)  
Antiguo 11/12/2013, 15:24
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

Hola Libras te molesto nuevamente.... la ultima sentencia no me funciona me muestra cualquier cosa

Cita:
SELECT mes,#alumnos.apenom FROM #cuotas,#alumnos
WHERE mes + #alumnos.apenom NOT IN (
SELECT t1.mes + t2.apenom FROM #cuotas AS t1
LEFT JOIN #pagos AS t2 ON (t1.ncuota=t2.ncuota)
WHERE apenom IS NOT NULL
) AND #cuotas.ncuota BETWEEN 1 AND 3
ORDER BY apenom
No se si recordaras que queria que me muestre los meses adeudados, de esta forma me muestra los meses pagos, o sea entre el 1 y el 3 estan pagos y me los muestra...

que podra ser ???

gracias
  #13 (permalink)  
Antiguo 11/12/2013, 15:32
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 Inexistentes LEFT JOIN

segun los datos de ejemplo esta bien ya que muestra lo siguiente:

ABRIL JUAN
MAYO JUAN
MAYO Libras
ABRIL Libras
MARZO Libras
MARZO LUIS
ABRIL LUIS

si te fijas juan debe abril y mayo que son las cuotas que estan entre 1 y 3
Libras debe mayo,abril,marzo y junio pero como nada mas quieres que se muestren entre 1 y 3 nada mas presenta mayo,abril y marzo revisa bien los datos de prueba
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 11/12/2013, 16:13
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

Ok Libras lo voy a revisar y te comenta...

MUCHAS GRACIAS
  #15 (permalink)  
Antiguo 11/12/2013, 22:09
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

Sisi libras perfecto.... tienes razon estaba mirando mal...

Te pregunto: tengo en una tabla registros duplicados... como los elimino ??

gracias
  #16 (permalink)  
Antiguo 11/12/2013, 22:18
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 Inexistentes LEFT JOIN

depende como esten duplicando y donde, puedes eliminarlos desde el left join o con un row_number o un having count, pero todo depende de tus datos
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #17 (permalink)  
Antiguo 12/12/2013, 09:27
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

A que te referis a como esten duplicados ?

Te cuento registros iguales salvo el id.
  #18 (permalink)  
Antiguo 12/12/2013, 09:54
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 Inexistentes LEFT JOIN

un ejemplo de tus datos.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #19 (permalink)  
Antiguo 12/12/2013, 10:57
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

La tabla Pagos... ha habido errores, debido a que los usuarios ingresaban 2 pagos iguales, obviamente solo el id es diferente, entonces por ejemplo Juan figuraba que pago marzo 2 veces y los reportes dan mal obviamente porque suman.
  #20 (permalink)  
Antiguo 12/12/2013, 11:03
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 Inexistentes LEFT JOIN

Cita:
Iniciado por cristian_fg Ver Mensaje
La tabla Pagos... ha habido errores, debido a que los usuarios ingresaban 2 pagos iguales
Aqui el error es de aplicacion y de tus llaves en la tabla para evitar esto que se hace? se pone una llave primaria con el mes junto con el id(obvio si los pagos son completos en caso de que se puedan hacer pagos parciales es diferente y en caso de que fuera asi haces la llave primaria de 3 campos id,mes,pago porque no creo que alguien haga un pago el mismo mes de la misma cantidad :P) como solucionarlo sencillo

Código SQL:
Ver original
  1. CREATE TABLE #pagos
  2. (
  3. id INT,
  4. dni INT,
  5. apenom VARCHAR(20),
  6. ncuota INT,
  7. total INT
  8. )
  9.  
  10. INSERT INTO #pagos VALUES (1,20258741,'JUAN',1,200)
  11. INSERT INTO #pagos VALUES (2,20258741,'JUAN',4,200)
  12. INSERT INTO #pagos VALUES (3,20258741,'JUAN',4,200)
  13. INSERT INTO #pagos VALUES (3,27413413,'LUIS',3,200)
  14.  
  15. SELECT * FROM(
  16. SELECT ROW_NUMBER() OVER(partition BY apenom,dni,ncuota ORDER BY apenom) AS rn,* FROM #pagos
  17. ) AS t1 WHERE rn=1
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #21 (permalink)  
Antiguo 12/12/2013, 13:58
 
Fecha de Ingreso: abril-2012
Mensajes: 61
Antigüedad: 12 años
Puntos: 1
Respuesta: Mostrar Inexistentes LEFT JOIN

Hola Libras... si era un error de aplicacion que ya solucione...obviamente nadie va a pagar dos veces... de echo era el filtro para que el usuario no haga eso por error..... ya no pasa.
Lo que quiero solucionar es esos errores del pasado que han quedado y simplemente queria eliminarlos.

Etiquetas: fecha, join, left, registro, select, 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 21:19.