SQL Server - doble consulta de una misma tabla

 
Vista:
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel (11 intervenciones) el 28/11/2016 01:47:59
Hola, buenas tardes, espero me puedan ayudar, tengo una tabla de un calendario de pagos, con datos como folio pago, fecha pago, monto pago, cliente, empresa, status, actualmente saco una consulta por fecha para ver pagos futuros algo asi como:

select distinct cliente, count(folio_pago) as documentos, sum(monto_pago) as total, empresa from calendario where fecha_pago between 01/11/2016' and '15/12/2016' and status = 'NP' group by .........

cliente documentos total empresa
===== ========= ==== ==========
125 2 1200 emp1
130 1 640 emp1
145 1 640 emp2

y obtengo sin problemas los pagos proximos a vencer en el periodo de fecha indicado, hasta aqui todo bien, ahora lo que quiero agregar, es una columna en donde me haga una suma de los pagos con status NP No pagados, que la fecha sea menor a la fecha1, es decir 01/11/2016, y asi obtener sus saldos vencidos anteriores a la fecha indicada

cliente documentos total empresa saldo
===== ========= ==== ========== ==========
125 2 1200 emp1 0
130 1 640 emp1 1280
145 1 640 emp2 640

para obtener esa ultima columna, lo puedo hacer asi

select distinct cliente, sum(monto:pago) as saldo from calendario where fecha_pago < '01/11/2016' and status = 'NP' group by ........

y obtengo

cliente saldo
======== ========
130 1280
145 640

la pregunta es, como puedo obtener el resultado en una misma consulta ????

Gracias de antemano por su atencion
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 6
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por José Luis (3 intervenciones) el 28/11/2016 17:04:22
Hola,

No entiendo la primera consulta el porqué usas DISTINCT.

Puedes usar consutas como tablas dentro una consulta.

Te voy a orientar,

1
2
3
4
5
6
7
select a.ID
     , b.ID
     , a.CAMPOTABLA1
     , b,CAMPOTABLA2
from (SELECT * FROM TABLA1) a,
     (SELECT * FROM TABLA2) b
WHERE A.ID=B.ID

Favor de comentar como te vá.


Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por Isaias (4558 intervenciones) el 28/11/2016 18:46:21
Pues si, pero NO. ¿para que traer TODOS los registros de "a" y "b" para luego filtrarlos?

Tan simple como un JOIN
1
2
3
4
5
6
select a.ID
     , b.ID
     , a.CAMPOTABLA1
     , b,CAMPOTABLA2
FROM a inner join b on a.id = b.id
WHERE A.ID=B.ID
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel Mora (11 intervenciones) el 28/11/2016 19:41:02
Hola Isaias, gracias por tu respuesta, las dos consultas que indico, son de una misma tabla, no son dos tablas, es un calendario de pagos, en la primer consulta, me da los pagos por vencer entre un periodo de fechas, fecha1 y fecha2, y la segunda me dice los pagos vencidos antes de fecha1, estas dos consultas son las que quiero saber si se pueden hacer en una sola, espero explicarme correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por Isaias (4558 intervenciones) el 28/11/2016 20:11:59
Gabriel

¿En que motor de base de datos estas trabajando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel Mora (11 intervenciones) el 28/11/2016 20:21:13
es sql server 2000 para una aplicacion en vb net
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por Isaias (4558 intervenciones) el 28/11/2016 21:05:18
Debes estar de acuerdo que SQL SERVER 2000, fue declarado hace mucho tiempo como fuera de soporte, incluso, 2008 ya no tiene soporte. ¿Has pensado en actualizar tu version?

¿Porque en tu SUM colocas algo asi sum(monto:pago)? (los dos puntos funcionan bien ahi???)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel Mora (11 intervenciones) el 28/11/2016 22:08:06
Perdon, fue error de dedo, y si funciona bien sum(monto_pago), en relacion al sql server, pues es lo que tiene mi cliente, tambien le he comentado el actualizar la plataforma de la base de datos en cuestion, la consulta que deseo hacer es posible en una version mas actualizada ????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por Isaias (4558 intervenciones) el 30/11/2016 00:40:24
Veo un problema, que son DOS conjuntos de datos totalmente diferentes, incluso su filtro (where) es diferente, solo se me ocurre hacer un select de ambos conjuntos y unirlos por un join, se requiere un campo en comun
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel Mora (11 intervenciones) el 28/11/2016 19:36:32
Hola Jose Luis, gracia por la respuesta, efectivamente el distinct esta de mas, lo usaba para agrupar por cliente los pagos, esta tabla es de un calendario de pagos de membresias, es decir, cada cliente tiene calendarizados, 12, 24 o 36 pagos mensuales, segun su membresia,, lo que hace mi primer consulta:

select cliente, count(folio_pago) as documentos, sum(monto_pago) as total, empresa from calendario where fecha_pago between 01/11/2016' and '15/12/2016' and status = 'NP' group by .........

es mostrarme los pagos que estan por vencer en el periodo de fecha que le indico, y funciona muy bien, lo que deseo, es agregar una columna en donde me muestre los pagos vencidos antes de la primer fecha indicada, no son dos tablas, es en la misma tabla, y la consulta es :

select cliente, sum(monto:pago) as saldo from calendario where fecha_pago < '01/11/2016' and status = 'NP' group by ........

estas son las que quiero saber si se pueden unir ....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 6
Ha disminuido su posición en 3 puestos en SQL Server (en relación al último mes)
Gráfica de SQL Server

doble consulta de una misma tabla

Publicado por José Luis (3 intervenciones) el 28/11/2016 23:04:20
Hola,

Claro que se puede, por eso puse el ejemplo para que te dieras una idea

1
2
3
4
5
6
7
select a.ID
     , b.ID
     , a.CAMPOTABLA1
     , b,CAMPOTABLA2
from (SELECT * FROM TABLA1) a,
     (SELECT * FROM TABLA2) b
WHERE A.ID=B.ID

La solución sería de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
select a.cliente
     , a.documentos
     , a.total
     , a.empresa
     , b.saldo
from (select cliente
           , count(folio_pago) as documentos
           , sum(monto_pago) as total
           , empresa
        from calendario
       where fecha_pago between '01/11/2016' and '15/12/2016'
         and status = 'NP'
       group by .........) a,
     (select cliente
           , sum(monto:pago) as saldo
        from calendario
       where fecha_pago < '01/11/2016'
         and status = 'NP'
      group by ........) b
where a.cliente = b.cliente


Favor de comentar como te fue.


Saludos
José Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

doble consulta de una misma tabla

Publicado por Gabriel Mora (11 intervenciones) el 29/11/2016 02:00:52
Jose Luis, eres un maestrazo, toda mi admiración y respeto para ti, efectivamente con tu ejemplo, obtengo el resultado esperado, como estaba tratando de hacerlo, es que mi primer consulta, la vacio en un listview de vb, y luego hacia un barrido fila por fila, tomando de la primer columna, el código del cliente y hacia un query con la segunda consulta para completar las dos siguientes columnas, como te imaginaras, en un listado de 700 clientes, además de la primer consulta, haría 700 mas para obtener las dos columnas faltantes, con esto en una sola obtengo toda la información, muchas gracias eres realmente un genio....saludos !!!!!


TODAVIA NO SE HAN LEVANTADO LAS BARRERAS QUE LE DIGAN AL GENIO: "DE AQUI NO PASARAS".
Ludwig von Beethoven.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar