Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-10-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Entonces suma el debe y el haber, si quieres agrupar por ellos, en caso contrario saldrá un registro por cada cifra distinta.
Responder Con Cita
  #2  
Antiguo 17-10-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Entonces suma el debe y el haber, si quieres agrupar por ellos, en caso contrario saldrá un registro por cada cifra distinta.
Creo que eso es lo que estoy haciendo con esto

Código SQL [-]
Select c1.id, c1.fecha, c1.cliente, c1.DEBE, C1.HABER,Sum(C2.DEBE-C2.HABER)as SALDO
from CTACTE C1
Responder Con Cita
  #3  
Antiguo 17-10-2019
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hola,

utiliza una store procedure. Creo que es la solución a tu problema.

No recuerdo bien la sintaxis, pero hay abundante información.
Saludos

CREATE OR ALTER MI_PROCEDURE ( variables de entrada...)
returns ( tu lista de campos incluyendo el saldo)
variables para acumular y controlar el flujo

FOR select bla bla bla
into :v1, :v2, :v3
ordenado por lo que te de la gana
do
si se cumple la condicion sumo, si no reseteo acumulado
hago el sumatorio de lo que quiero en base a la condicion que quiero...


suspend
end
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 17-10-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Si entiendo bien, esta consulta lo resuelve:

Código SQL [-]
SELECT 
*,
SUM(debe - haber) OVER (
    PARTITION BY cli --quitar si no debe calcular saldo por cliente, sino global
    ORDER BY id
   ) AS saldo_calculado
FROM mytable
ORDER BY id, fecha

Una explicacion de las funciones windows/cte (en postgresql que normalmente es lo que tiene mejor documentacion):

http://www.postgresqltutorial.com/po...ndow-function/

Código:
id  |   fecha    | cli | debe | haber | saldo | saldo_calculado 
-----+------------+-----+------+-------+-------+-----------------
  80 | 2019-08-27 |  11 |  120 |     0 |   120 |             120
  81 | 2019-08-27 |  11 |   50 |     0 |   170 |             170
  82 | 2019-08-27 |  11 |  250 |     0 |   420 |             420
 131 | 2019-08-29 |  11 |  300 |     0 |   720 |             720
 261 | 2019-09-03 |  11 |   30 |     0 |   750 |             750
 273 | 2019-09-14 |  11 |    0 |    20 |   730 |             730
 274 | 2019-09-01 |  11 |    0 |   150 |   580 |             580
 275 | 2019-09-12 |  11 |    0 |   100 |   480 |             480
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 18-10-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Ahora estoy probando modificar eso.

tuve que poner mytable.* en lugar de * solo al inicio y ahí larga algo, ahora veré que puedo hacer con eso

Última edición por amadis fecha: 18-10-2019 a las 00:33:57.
Responder Con Cita
  #6  
Antiguo 21-10-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Hola colegas, disculpen que tuve que ausentarme unos días.

El aporte del colega Mamcx responde lo que preguntaba y necesitaba a la perfección.

Ahora unas consultas más para comprender, como funciona ésto.

Lo que veo es una gran simplificación de la consulta original que había planteado sin resultados

¿esto es CTE?

¿que es lo que hacen Over y Partition?

Gracias a todos y espero que esto ayude a muchos más
Responder Con Cita
  #7  
Antiguo 21-10-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Hay buen material de esto. Mi primera exposición a lo nuevo en SQL fue:

https://modern-sql.com/video

CTE es un poco mas dificil de entender, pero las funciones windows son mas simples.

SQL funciona maso asi:

Código PHP:
for current in query.next() do
  
//tengo solo una fila. No se que datos habian antes o despues
  
print current 
Con windows ( un "window" aqui se entienden como una "vista a la ejecucion"), es como si pasara esto:
Código PHP:
old null;
next null
for currentnext in query.next(); query.next() do
   print 
oldcurrentnext //la fila anterior, actual y siguiente
   //Ahora puedo usar acumulados en base a lo anterior!
   
old current 
__________________
El malabarista.
Responder Con Cita
  #8  
Antiguo 21-10-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Muchas gracias por el material y el link del video. Comenzaré a estudiar modern-sql
Porque una vez comprendido ahora tiempo, dolores de cabeza y seguramente mejora la performance.
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
calcular saldo Firebird+DBX hibero Firebird e Interbase 4 24-03-2008 16:42:53
Hacer readonly una columna en stringgrid zcatzz Varios 5 26-09-2007 16:59:50
Como hacer una columna Acumulada en SQL egarc SQL 14 21-09-2007 23:26:01
Como hacer esto a una columna de un cxgrid??? AFilth Varios 0 22-11-2006 12:08:19
Como hacer invisible columna de Grid? txuseibar OOP 4 10-10-2003 19:04:15


La franja horaria es GMT +2. Ahora son las 21:29:01.


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