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

[SOLUCIONADO] Select comparando dos registros de la misma tabla SQL SERVER

Estas en el tema de Select comparando dos registros de la misma tabla SQL SERVER en el foro de SQL Server en Foros del Web. Buenas tardes. Necesito de vuestra ayuda, estoy batallando con un query que me devuelva las facturas que solo les hace falta pagar la última cuota. ...
  #1 (permalink)  
Antiguo 24/10/2014, 15:18
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Mensaje Select comparando dos registros de la misma tabla SQL SERVER

Buenas tardes.
Necesito de vuestra ayuda, estoy batallando con un query que me devuelva las facturas que solo les hace falta pagar la última cuota.

status cuota factura
C 1 345
C 2 345
O 3 345
O 4 345

C 1 346
C 2 346
O 3 346

C 1 347
C 2 347
O 3 347
O 4 347
O 5 347
De las tres facturas la única que me imprimiría la consulta sería la 346 ya que las otras dos cuotas ya están CANCELADAS. Y las facturas 345 y 347 tienen mas de una cuota con status en 'O'
C= pagada la cuota
O= falta pagar la cuota
  #2 (permalink)  
Antiguo 24/10/2014, 15:31
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: Select comparando dos registros de la misma tabla SQL SERVER

¿Y el avance de tu query?
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 24/10/2014, 15:35
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: Select comparando dos registros de la misma tabla SQL SERVER

y cual es la logica para sacar lo que quieres????
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 24/10/2014, 15:44
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Select comparando dos registros de la misma tabla SQL SERVER

he estado probando de esta forma pero me marca error. InstlmntID=cuotas
Código SQL:
Ver original
  1. SELECT T0.[DocEntry] AS'Factura', T0.[STATUS] AS'Estado'
  2. FROM INV6 T0
  3. WHERE (MAX(T0.[InstlmntID])-1 AND  T0.[STATUS] ='c' )
  4. AND   (MAX(T0.[InstlmntID]) AND T0.[STATUS] ='O')

Última edición por gnzsoloyo; 24/10/2014 a las 17:02
  #5 (permalink)  
Antiguo 24/10/2014, 15:46
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: Select comparando dos registros de la misma tabla SQL SERVER

cual es la logica?? cuales son las condiciones???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 24/10/2014, 15:48
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Select comparando dos registros de la misma tabla SQL SERVER

Cita:
Iniciado por Libras Ver Mensaje
y cual es la logica para sacar lo que quieres????

Necesito comparar la penultima cuota con la ultima, y debo mostrar solo la ultima en el caso que sea estado='O' y que la penultima sea estado='C'

Se mostrará si y solo si Penúltima cuota='C' y Ultima cuota='O'
  #7 (permalink)  
Antiguo 24/10/2014, 16:22
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: Select comparando dos registros de la misma tabla SQL SERVER

siguiendo tu logica:


Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (STATUS VARCHAR(20),
  3.  cuota INT,
  4.  factura INT)
  5.  
  6. INSERT INTO #temp VALUES ('C', 1, 345 )
  7. INSERT INTO #temp VALUES ('C', 2, 345 )
  8. INSERT INTO #temp VALUES ('O', 3, 345 )
  9. INSERT INTO #temp VALUES ('O', 4, 345 )
  10.  
  11. INSERT INTO #temp VALUES ('C', 1, 346 )
  12. INSERT INTO #temp VALUES ('C', 2, 346 )
  13. INSERT INTO #temp VALUES ('O', 3, 346 )
  14.  
  15. INSERT INTO #temp VALUES ('C', 1, 347 )
  16. INSERT INTO #temp VALUES ('C', 2, 347 )
  17. INSERT INTO #temp VALUES ('O', 3, 347 )
  18. INSERT INTO #temp VALUES ('O', 4, 347 )
  19. INSERT INTO #temp VALUES ('O', 5, 347)
  20.  
  21.  
  22.  
  23.  
  24. SELECT CASE WHEN test=3 THEN factura END AS resultado FROM
  25. (
  26. SELECT SUM(cuenta) AS test, factura FROM(
  27. SELECT
  28. CASE WHEN STATUS='o' THEN 1 ELSE 2 END AS cuenta, t1.*
  29.  FROM #temp AS t1
  30. LEFT JOIN(
  31. SELECT MAX(cuota) AS maximo, factura FROM #temp GROUP BY factura
  32. UNION
  33. SELECT MAX(cuota)-1 AS maximo, factura FROM #temp GROUP BY factura
  34. ) AS t2 ON (t1.cuota=t2.maximo AND t1.factura=t2.factura)
  35. WHERE t2.maximo IS NOT NULL
  36. ) AS t3 GROUP BY factura
  37. ) AS t4

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #8 (permalink)  
Antiguo 24/10/2014, 16:48
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
Mensaje Respuesta: Select comparando dos registros de la misma tabla SQL SERVER

Cita:
Iniciado por Libras Ver Mensaje
siguiendo tu logica:


Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (STATUS VARCHAR(20),
  3.  cuota INT,
  4.  factura INT)
  5.  
  6. INSERT INTO #temp VALUES ('C', 1, 345 )
  7. INSERT INTO #temp VALUES ('C', 2, 345 )
  8. INSERT INTO #temp VALUES ('O', 3, 345 )
  9. INSERT INTO #temp VALUES ('O', 4, 345 )
  10.  
  11. INSERT INTO #temp VALUES ('C', 1, 346 )
  12. INSERT INTO #temp VALUES ('C', 2, 346 )
  13. INSERT INTO #temp VALUES ('O', 3, 346 )
  14.  
  15. INSERT INTO #temp VALUES ('C', 1, 347 )
  16. INSERT INTO #temp VALUES ('C', 2, 347 )
  17. INSERT INTO #temp VALUES ('O', 3, 347 )
  18. INSERT INTO #temp VALUES ('O', 4, 347 )
  19. INSERT INTO #temp VALUES ('O', 5, 347)
  20.  
  21.  
  22.  
  23.  
  24. SELECT CASE WHEN test=3 THEN factura END AS resultado FROM
  25. (
  26. SELECT SUM(cuenta) AS test, factura FROM(
  27. SELECT
  28. CASE WHEN STATUS='o' THEN 1 ELSE 2 END AS cuenta, t1.*
  29.  FROM #temp AS t1
  30. LEFT JOIN(
  31. SELECT MAX(cuota) AS maximo, factura FROM #temp GROUP BY factura
  32. UNION
  33. SELECT MAX(cuota)-1 AS maximo, factura FROM #temp GROUP BY factura
  34. ) AS t2 ON (t1.cuota=t2.maximo AND t1.factura=t2.factura)
  35. WHERE t2.maximo IS NOT NULL
  36. ) AS t3 GROUP BY factura
  37. ) AS t4

saludos!



Lo probaré y adaptaré a mi necesidad. Gracias hay les aviso como me queda
  #9 (permalink)  
Antiguo 24/10/2014, 17:22
Avatar de leandro_reyes  
Fecha de Ingreso: octubre-2013
Mensajes: 7
Antigüedad: 10 años, 6 meses
Puntos: 0
De acuerdo Respuesta: Select comparando dos registros de la misma tabla SQL SERVER

Cita:
Iniciado por leandro_reyes Ver Mensaje
Lo probaré y adaptaré a mi necesidad. Gracias hay les aviso como me queda
Ya lo he logrado con la gran ayuda hermano.
asi me quedo, solo le haré agregaré unas columnas más y lo convertiré en store procedure.

Código SQL:
Ver original
  1. SELECT T0.[STATUS]AS'STATUS',T0.[InstlmntID] AS'cuota',T0.[DocEntry] AS'factura'
  2.  INTO #temp FROM INV6 t0
  3. SELECT  CASE WHEN test=3 THEN factura END AS resultado INTO #temp1 FROM
  4. (
  5. SELECT SUM(cuenta) AS test, factura FROM(
  6. SELECT
  7. CASE WHEN STATUS='o' THEN 1 ELSE 2 END AS cuenta, t1.*
  8.  FROM #temp AS t1
  9. LEFT JOIN(
  10. SELECT MAX(cuota) AS maximo, factura FROM #temp GROUP BY factura
  11. UNION
  12. SELECT MAX(cuota)-1 AS maximo, factura FROM #temp GROUP BY factura
  13. ) AS t2 ON (t1.cuota=t2.maximo AND t1.factura=t2.factura)
  14. WHERE t2.maximo IS NOT NULL
  15. ) AS t3 GROUP BY factura
  16. ) AS t4
  17. SELECT t0.docnum, T0.[CardCode], T0.[CardName] FROM OINV t0 INNER JOIN #temp1 t1 ON t0.docentry=t1.resultado



El principio de la Sabiduría es el temor de Jehová

Última edición por gnzsoloyo; 24/10/2014 a las 17:32

Etiquetas: query
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 20:30.