SQL - Obtener deuda total y comprobantes impagos

 
Vista:
sin imagen de perfil

Obtener deuda total y comprobantes impagos

Publicado por Daniel (39 intervenciones) el 28/01/2016 19:27:24
Hola al foro, tengo una consulta en Microsoft SQL Server 2000 con los siguientes datos, ahora bien, tengo que agregar una columna que me indice cuantos comprobantes se adeudan, cual sería la mejor manera de obtener la Cantidad de Comprobantes impagos?.
El SALDO me lo arroja bien, pero la cantidad de comprobantes me salen incorrectos. Debería agrupar en una subconsulta por comprobante cuyo saldo agrupado sea mayor a 0 pero no me doy cuenta la sintaxis).

MOVIMIENTOS
ID_Cliente Comprobante Importe
25 3 150
25 3 40
25 3 -190
25 4 180
25 4 50
Por ejemplo, de este Cliente 25 me tendría que decir que debe 1 comprobante.

SELECT CARNETS.NRO_CARNET, CARNETS.CUENTA, SOCIOS.Nombre AS APENOMBRE,
CARNETS.SEQUENCIAL, CONTABILIDAD.NOMBRE AS Actividad,
CARNETS.FECHA_ENTREGA, CARNETS.FECHA_VENCE,
COBRADORES.NOMBRE AS Cobrador, CARNETS.IMPORTE,
FORMAS_PAGO.Nombre AS FormaPago,
SUM(MOVIMIENTOS.IMPORTE) AS SALDO,
COUNT(MOVIMIENTOS.NROCOMPROBANTE) as Comprobantes
FROM CARNETS INNER JOIN
SOCIOS ON CARNETS.CUENTA = SOCIOS.ID_Socio INNER JOIN
CONTABILIDAD ON CARNETS.CUENTA_CONTAB = CONTABILIDAD.NUEVO_NRO_CC INNER JOIN
COBRADORES ON SOCIOS.CodigoCobrador = COBRADORES.COD_COBRADOR INNER JOIN
FORMAS_PAGO ON CARNETS.FORMA_PAGO = FORMAS_PAGO.COD_FormaPago INNER JOIN
MOVIMIENTOS ON CARNETS.CUENTA = MOVIMIENTOS.ID_Cliente
GROUP BY CARNETS.NRO_CARNET, CARNETS.CUENTA, SOCIOS.Nombre, CARNETS.SEQUENCIAL, CONTABILIDAD.NOMBRE, CARNETS.FECHA_ENTREGA, CARNETS.FECHA_VENCE, COBRADORES.NOMBRE, CARNETS.IMPORTE, FORMAS_PAGO.Nombre

Muchas gracias. Espero haber sido claro, el detalle del resto de las tablas supongo no tiene importancia.
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: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Obtener deuda total y comprobantes impagos

Publicado por leonardo_josue (1173 intervenciones) el 28/01/2016 23:24:41
Hola Daniel:

No entiendo a qué te refieres con que el cliente 25 debe 1 comprobante, en todo caso, con los datos que pones de ejemplo, puedes determinar qué comprobantes tienen un saldo distinto de 0, es decir, haces algo como esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> SELECT * FROM tabla;
+------------+-------------+---------+
| id_cliente | Comprobante | Importe |
+------------+-------------+---------+
|         25 |           3 |     150 |
|         25 |           3 |      40 |
|         25 |           3 |    -190 |
|         25 |           4 |     180 |
|         25 |           4 |      50 |
+------------+-------------+---------+
5 rows in set (0.00 sec)
 
mysql> SELECT id_cliente, comprobante, SUM(importe) saldo
    -> FROM tabla
    -> GROUP BY id_cliente, comprobante;
+------------+-------------+-------+
| id_cliente | comprobante | saldo |
+------------+-------------+-------+
|         25 |           3 |     0 |
|         25 |           4 |   230 |
+------------+-------------+-------+
2 rows in set (0.00 sec)

aquí se observa que el comprobante 4 ya está saldado, es decir, la suma de los importes tanto positivos como negativos es igual a cero. si quieres mostrar sólo aquellos comprobantes que tengan un saldo distinto de 0, entonces agregas una cláusula HAVING al final de la consulta. Si tienes dudas de cómo funciona el HAVING, preguntale a SAN GOOGLE, él generalmente tiene la respuesta.

Saludos
Leo.
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

Obtener deuda total y comprobantes impagos

Publicado por Daniel (39 intervenciones) el 29/01/2016 18:26:58
Gracias por responder Leo, lo que necesito saber (ademas del saldo total que ya está resuelto) como hago para que me devuelva en otra columna la cantidad de comprobantes impagos.
Sería algo así como una mezcla de SUM agrupado por comprobante y un COUNT de los comprobantes cuando esa suma es mayor a CERO, pero no me doy cuenta.
Muchas gracias.
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

Obtener deuda total y comprobantes impagos

Publicado por Joe (1 intervención) el 02/02/2016 00:15:53
1
2
3
4
5
6
7
8
SELECT id_cliente, comprobante, SUM(importe) saldo, COUNT(comprobante) as [Comprobantes por pagar]
FROM tabla
group by id_cliente, comprobante having (sum(importe)>0)
 
 
id_cliente | comprobante | saldo | comprobantes por pagar
---------------------------------------------
     25    |  4          | 230   |   2
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

Obtener deuda total y comprobantes impagos

Publicado por Daniel (39 intervenciones) el 02/02/2016 19:59:08
Gracias Joe por contestar, pero solo con un COUNT no sirve, los comprobantes adeudados son solo UNO.
Revisar el primer post, el numero de comprobante no me interesa mostrarlo, SI la cantidad de comprobantes impagos o adeudados.
Para mi lo tengo que hacer con un select anidado pero no me doy cuenta.
Muchas gracias.
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