Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   select con resta entre sums como condición (https://www.clubdelphi.com/foros/showthread.php?t=95666)

SmartZooft 26-04-2022 02:54:11

select con resta entre sums como condición
 
Hola a todos, ya busqué en los foros y no encontré lo que estoy buscando, les platico:

tengo un query que me da el total de ventas, el total de pagos y el saldo, el saldo es la resta del total menos los pagos.

Lo que quiero es que me muestre únicamente los registros que tengan saldo mayor a cero.

El query funciona bien:

Código:

SELECT
id_cliente,
CAST(SUM(Total) AS NUMERIC(8,2)) ventas,
CAST(SUM(Pago) AS NUMERIC(8,2)) pagos,
CAST(SUM(Total)-SUM(Pago) AS NUMERIC(8,2)) Saldo
FROM
Historia
WHERE
Id_Sucursal = 1
group by id_cliente


pero cuando agrego la condición da error

Código:

SELECT
id_cliente,
CAST(SUM(Total) AS NUMERIC(8,2)) ventas,
CAST(SUM(Pago) AS NUMERIC(8,2)) pagos,
CAST(SUM(Total)-SUM(Pago) AS NUMERIC(8,2)) Saldo
FROM
Historia
WHERE
Id_Sucursal = 1
AND
(SUM(Total)-SUM(Pago))> 0
group by id_cliente

si me pueden a ayudar a resolver este enigma se los agradeceré con el alma, gracias.

cloayza 26-04-2022 03:43:21

Creo que lo que necesitas es la instrucción Having
Código SQL [-]
SELECT
id_cliente,
CAST(SUM(Total) AS NUMERIC(8,2)) ventas,
CAST(SUM(Pago) AS NUMERIC(8,2)) pagos,
CAST(SUM(Total)-SUM(Pago) AS NUMERIC(8,2)) Saldo
FROM
Historia
WHERE
Id_Sucursal = 1
group by id_cliente
Having CAST(SUM(Total)-SUM(Pago) >0
Salidos cordiales

SmartZooft 26-04-2022 17:50:44

muchas gracias cloayza, lamentablemente no funcionó, no da error pero me sigue trayendo todos los saldos.

también sigo buscando la solución, si la encuentro antes se las comparto.

gracias por la ayuda.

SmartZooft 26-04-2022 18:10:06

Fe de erratas.

amigo cloayza, corrijo, sí funcionó, sólo quité algunos paréntesis y funcionó a la perfección, muchas gracias por la ayuda.

les paso cómo quedó el query real:

Código SQL [-]
SELECT
id_cliente,
CAST(SUM(Total) AS NUMERIC(8,2)) ventas,
CAST((SUM(Efectivo + Credito + Debito + Cheque + Transferencia + Deposito + Vales)) AS NUMERIC(8,2)) pagos,
CAST(SUM(Total-(Efectivo + Credito + Debito + Cheque + Transferencia + Deposito + Vales)) AS NUMERIC(8,2)) Saldo
FROM
Historia
WHERE
((Agenda IS NULL) or (Agenda = ''))
AND
((Ticket_Cancelado = 'N')or (Ticket_Cancelado is null) or (Ticket_Cancelado = ''))
group by id_cliente
Having CAST(SUM(Total-(Efectivo + Credito + Debito + Cheque + Transferencia + Deposito + Vales)) AS NUMERIC(8,2)) >0

Gracias!!

cloayza 26-04-2022 19:54:34

Estimado SmartZooft: Que bueno que pudo solucionar su inconveniente.

Me intriga saber porque hace uso de la instrucción CAST...Siendo que los campos al parcer son numericos.

Bueno lo importante es que funciona...Y si funciona dejalo así...

:D

Elias011267 08-05-2022 16:01:16

Querido Cloayza porque la funcion sum en componentes tquery arroja valores vacios si no haces la conversion. ¿el porque ? al parecer un bugs

cloayza 08-05-2022 16:46:22

Estimado colega: yo creo que es porque dentro de los valores qué suma debe haber valores Null...motivo por el cual te arroja valores nullos en la sumatoria.
Creo recordar un artículo de otro colega tratando el tema de campos nulos y operaciones matemáticas...
Por otro lado, existen funciones que realizan el proceso de chequear si un campo es nulo y retornar un valor por defecto.
En firebird existe Coalesce(Valor, valor-defecto-siesnulo).
Por ejemplo: Coalesce(Precio, 0)
También se puede utilizar la función iif(valor is null, 0, valor).
Bueno es solo para cometar...si tu método funciona dejalo así...

Saludos cordiales


La franja horaria es GMT +2. Ahora son las 12:50:30.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi