Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-04-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Siento deciros que esta consulta no se puede hacer de una sola vez a no ser que se haga lo siguiente:
1.- Crear una función que calcule el campo balance
Código SQL [-]
SELECT FECHA, SUM(Entrada), SUM(Salida), Balance(FECHA) FROM Tabla
GROUP BY FECHA
siendo balance una función , store procedure o como se diga, que haga lo siguiente, que es calcular la suma hasta la fecha anterior.

Código SQL [-]
FUNCTION BALANCE ( FECHAPARAMETRO)
DEFINO VARIABLE double;

SELECT sum(Entrada-Salida) INTO VARIABLE FROM Tabla
WHERE FECHA < FECHAPARAMETRO

RETURN VARIABLE
Como podeis ver, no sé escribir el código exacto ya que no tengo SQL SERVER.

2.- Si no se quiere hacer en SQL, crear el delphi un campo calculado en la ttable o tquery, que calcule el valor de BALANCE con la misma query que pongo en el caso 1.

Lo explico a 'grosso modo', porque ando un poco justo de tiempo.

Además, falta filtrar todo por codigo de producto, ya que si no nos mezclaría los datos de los distintos productos.

Espero haberos ayudado.

Un saludo y suerte.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #2  
Antiguo 19-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Hola fjcg02 pues ya he probado mi consulta en una base MS SQL y me da el resultado que quiero, por otro lado de acuerdo a la pregunta de Nelson no encuentro donde dice que hay que filtrar por código de producto.

Esto es lo único que necesita

´fecha´ ´entrada´ ´salida ´ ´ balance
´12/01/2007´ ´15 ´ ´ 0 ´ ´ 15
´13/01/2007´ ´ 0 ´ ´ 2 ´ ´ 13
´14/01/2007´ ´ 5 ´ ´ 0 ´ ´ 18

Que diferencia hay entre lo que yo hago

Código SQL [-]
sum(Entrada-Salida) AS Balance

con lo que tu haces.

Código SQL [-]
sum(Entrada-Salida) INTO VARIABLE

Disculpa pero no lo entiendo bien, puedo equivocarme, si es asi corrijanme por favor.

Salud OS.

Edito:

Retiro todo lo dicho, tienes razon fjcg02, el asunto es que va descontando el balance de acuerdo a las salidas y entradas.

Mea culpa.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney

Última edición por egostar fecha: 19-04-2007 a las 01:01:27.
Responder Con Cita
  #3  
Antiguo 19-04-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Cita:
Esto es lo único que necesita

´fecha´ ´entrada´ ´salida ´ ´ balance
´12/01/2007´ ´15 ´ ´ 0 ´ ´ 15
´13/01/2007´ ´ 0 ´ ´ 2 ´ ´ 13
´14/01/2007´ ´ 5 ´ ´ 0 ´ ´ 18
Cita:
quisiera generar la siguiente consulta por producto
------------------------------------------------------
fecha entrada salida balance
12/01/2007 15 0 15
13/01/2007 0 2 13
14/01/2007 5 0 18
Según tu consulta, los valores de balance serían
15
-2
5

y no 15, 13, 18.
Es decir, el campo balance es un dato que se calcula sumando o restando del valor de la fila anterior. Balance = balance fila anterior + (entradas -salidas) fila actual. Tu consulta funciona perfectamente, pero no saca la información que necesita nuestro amigo Nelson Alberto.

Espero haberme explicado mejor. El que debiera mejorar su pluma es Nestor
No hace falta que te disculpes por nada, y por supuesto, yo no pretendo corregir a nadie, sino aportar mi punto de vista y mi experiencia ( si puedo ).

Saludos.
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 19-04-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por fjcg02
No hace falta que te disculpes por nada, y por supuesto, yo no pretendo corregir a nadie, sino aportar mi punto de vista y mi experiencia ( si puedo ).
Amigo fjcg02, siempre he dicho que cuando uno habla lo debe de hacer responsablemente, en este caso mi comentario fue sin haber leido correctamente el problema.

Por tal razón considero que si debo ofrecerte una disculpa, digo, es de caballeros.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 19-04-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
egostar,
insisto en que no es necesario que te disculpes por nada, faltaría más.
A quien yo sí debo pedir disculpas es a Nelson Alberto, al que en el post anterior he bautizado ( le llamaba Nestor ) y al que le hemos 'boicoteado' un poco su hilo, ya que nos alejamos de lo que originalmente preguntó.
Lo dicho Nelson Alberto, si tienes alguna duda, intentaremos ayudarte.

Saludos a todos
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #6  
Antiguo 19-04-2007
Nelson Alberto Nelson Alberto is offline
Miembro
 
Registrado: may 2003
Ubicación: Santiago, Rep. Dominicana
Posts: 30
Poder: 0
Nelson Alberto Va por buen camino
Como dice nuestro amigo fjcg02 lo que pretendo es acumular los balance un una columna y me de como resultado 15, 13, 18 y no encuentro la manera de hacerlo, soy nuevo en al manejo de sql, ya que he trabajado con tablas planas y ahora estoy trabajando con sql express, agradesco su cooperacion. gracias
__________________
EL Duque
Responder Con Cita
  #7  
Antiguo 20-04-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.418
Poder: 24
fjcg02 Va camino a la fama
Bueno,
he probado haciendo una procedure, y soy incapaz de hacerlo funcionar. Como tengo la cabeza algo dura, he seguido probando, y haciendo alguna prueba, he conseguido esto

Código SQL [-]
SELECT     codigo, 
               fecha AS fecha, 
               SUM(entradas) AS Entrada, 
               SUM(salidas) AS salida, 
               SUM(entradas) - SUM(salidas) +
                          (SELECT     SUM(entradas - salidas)
                            FROM          inventario
                            WHERE      codigo = I.codigo AND fecha < I.fecha) 
                          AS balance
FROM         Inventario I
GROUP BY codigo, fecha
con el inconveniente de que la primera fila el campo balance da nulo porque la query saca un valor nulo.
Se podría poner un case para intentar maquear el resultado, pero ya no me queda fósforo en el coco. No sé si estoy haciendo una burrada, es decir, si la select dará el rendimiento adecuado, pero menos es nada, Ojo, que el orden de los sumandos de la columna 'balance' sí influye en que la query pase el analizador o no de errores de sintaxis.

esta es la salida de mi juego de ensayo

Código SQL [-]
codigo__Fecha________Entrada___Salida  Balance
0001____01/01/2007___15________5_________null  
0001____02/02/2007___10________3_________17
0001____03/03/2007____3________0_________20

Suerte y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Como imprimir un balance de situacion o diario escullar Impresión 2 26-04-2006 17:53:37
consulta sobre .ini bytecero Varios 2 02-02-2005 21:01:09
Pregunta sobre SQL a los gurus...(BALANCE) txemag SQL 6 20-02-2004 18:09:12
consulta sobre consulta superhopi SQL 2 16-05-2003 19:01:47


La franja horaria es GMT +2. Ahora son las 01:28:24.


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