Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-04-2022
SmartZooft SmartZooft is offline
Miembro
 
Registrado: dic 2016
Posts: 22
Poder: 0
SmartZooft Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 26-04-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
  #3  
Antiguo 26-04-2022
SmartZooft SmartZooft is offline
Miembro
 
Registrado: dic 2016
Posts: 22
Poder: 0
SmartZooft Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 26-04-2022
SmartZooft SmartZooft is offline
Miembro
 
Registrado: dic 2016
Posts: 22
Poder: 0
SmartZooft Va por buen camino
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!!

Última edición por Casimiro Notevi fecha: 26-04-2022 a las 19:32:33. Razón: Cambiar CODE por SQL
Responder Con Cita
  #5  
Antiguo 26-04-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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í...

Responder Con Cita
  #6  
Antiguo 08-05-2022
Elias011267 Elias011267 is offline
Miembro
 
Registrado: jul 2020
Posts: 75
Poder: 5
Elias011267 Va por buen camino
Querido Cloayza porque la funcion sum en componentes tquery arroja valores vacios si no haces la conversion. ¿el porque ? al parecer un bugs
Responder Con Cita
  #7  
Antiguo 08-05-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 933
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Condición para un SELECT Angel.Matilla Firebird e Interbase 3 09-02-2018 11:31:44
Como usar Update con una condicion where de la resta de dos campos cvlaso77 SQL 5 24-04-2012 02:42:57
como interactuar entre dos combos <select> gabrielflowers PHP 3 19-06-2010 22:50:04
Condición Where con resta de 2 campos Johnny Q SQL 6 13-01-2006 19:02:57
Select con una condicion un poco peculiar mrmanuel SQL 6 16-08-2005 13:53:38


La franja horaria es GMT +2. Ahora son las 02:10:27.


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
Copyright 1996-2007 Club Delphi