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 11-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
consulta que de resultado entrada, salida y saldo

Hola foro:
Será posible hacer una conculta que de como resultado la siguiente salida?.
La tabla es algo así:
Fecha--- Detalle--Cantidad
01/01/07 Compra_____5
02/01/07 Venta_____ -1
03/01/07 Venta_____ -3
04/01/07 Compra____ 2

Y el la salida que necesito es:
Fecha--- Detalle--Entrada--Salida--Stock
01/01/07 Compra____5______ 0_____5
02/01/07 Venta_____0______-1_____4
03/01/07 Venta_____0______-3_____1
04/01/07 Compra____2______ 0_____3

Estoy usando InterBase.
Bueno, Si alguno tiene una idea le agradeceré infinitamente.
Responder Con Cita
  #2  
Antiguo 12-11-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 21
enecumene Va por buen camino
Hola, una pregunta como haces la entrada y las salidas? las mismas se encuentran en otra tabla? por favor, si no es ninguna molestia podrias explicarnos mas a fondo?.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #3  
Antiguo 12-11-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Quizá te pueda valer lo siguiente :
Código SQL [-]
Select T1.fecha, T1.detalle, 
       case when T1.cantidad > 0 then 
         T1.cantidad 
       else 
         0 
       end as Entrada, 
       case when T1.cantidad < 0 then 
         T1.cantidad 
       else 
         0 
       end as Salida, Sum(T2.Cantidad) Stock
from Tabla T1 inner join Tabla T2 on T1.Fecha >= T2.Fecha
group by T1.fecha, T1.detalle, T1.cantidad
order by fecha

Puede ser que tengas entradas y salidas el mismo día, por lo que en la condición de join tendrías que incluír algo más para el cálculo del acumulado, como pudiese ser un código incremental u otra clave.

Un saúdo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)

Última edición por Ivanzinho fecha: 12-11-2007 a las 17:51:44. Razón: Editado para poner la tabla de referencia de los campos
Responder Con Cita
  #4  
Antiguo 13-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Gracias por responder

Hola.
Enecumene, gracias por preguntar. los datos están en una sola tabla y es donde grabo el movimiento de stock, un registro por cada venta. en esa misma tabla se guarda el movimiento cuando se hace una compra.
ej,
cte--- fecha---- cantidad
FC 1 01/01/2007--- -300 (vendí treceintos)
FC 2 01/01/2007--- -400 (vendí cuatrocientos)
RM 5 01/01/2007--- 1000 (compré mill)

entonces necesito hacer la famosa ficha "KARDEX"

Articulo xxxxxxxx
fecha--detalle--entradas--salidas--stock
Saldo anterior-------------------- 1200
01/01/07 fc 1----------------300---900
01/01/07 fc 2 ---------------400---500
01/01/07 RM 5--1000--------------1500


Con respecto a a la Propuesta de IVanzinho, creo que InterBase no soporta esa sintaxis, porque me dan errores por todos lados.
Bueno. a seguir probando, y gracias.
Responder Con Cita
  #5  
Antiguo 13-11-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por Carmelo Cash Ver Mensaje
Con respecto a a la Propuesta de IVanzinho, creo que InterBase no soporta esa sintaxis, porque me dan errores por todos lados.
Bueno. a seguir probando, y gracias.
¿Qué errores te da?

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #6  
Antiguo 13-11-2007
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 20
Héctor Randolph Va por buen camino
La sentencia de Ivanzinho es perfectamente válida en Firebird 1.5 o superior.
Interbase no sé si soporta CASE, al menos en la versión 6.5 que es la que yo utilizaba no existía.

En cambio se puede lograr lo mismo con un procedimiento almacenado.

Saludos
Responder Con Cita
  #7  
Antiguo 13-11-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
El CASE fué introducido en firebird a partir de la versión 1.5 y en interbase en la 7.5, si la versión que tienes es anterior entonces lo mejor, como comento hector, es que lo hagas en un procedimiento almacenado o que actualices a una versión superior.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #8  
Antiguo 13-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Gracias

Comenzaré a probar con procedimintos almacenados. Gracias amigos.
Responder Con Cita
  #9  
Antiguo 17-11-2007
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Ya lo solucioné !!! una parte

Bueno la primer parte fué facil, quedó más o menos así.

Select fecha, detalle, cantidad as entrada, (cantidad * 0) as salida
From Movimientos
where cantidad > 0
Union
Select fecha, detalle, (cantidad * 0) as entrada, (cantidad * -1) as salida
From Movimientos
where cantidad < 0

(Muy astuto ¿no?)

Con esto obtengo entrada y salida, la columna de saldo la hice con una etiqueta de cálculo poniendo Sum(Entrada-salida).

No encontré como resolver el saldo en la consulta. Si alguién tiene una idea bienvenido sea.
Gracias.
Responder Con Cita
  #10  
Antiguo 12-11-2009
pcicom pcicom is offline
Miembro
 
Registrado: may 2003
Ubicación: MONTERREY MEXICO
Posts: 253
Poder: 21
pcicom Va por buen camino
Sin UNION

Código SQL [-]

Select fecha, detalle, 
  IF(cantidad>=0,CANTIDAD,0)  as entrada, 
  IF(cantidad<0,cantidad,0) as salida
From Movimientos
__________________
Poco ha de saber el que no pregunta.. Yo por eso soy un pregunton
Responder Con Cita
  #11  
Antiguo 12-11-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Cita:
Empezado por pcicom Ver Mensaje
Sin UNION

Código SQL [-] Select fecha, detalle, IF(cantidad>=0,CANTIDAD,0) as entrada, IF(cantidad<0,cantidad,0) as salida From Movimientos
Yo creo que le ha servir nomas al amigo Carmelo Cash, tu solucion ya que es un hilo (tema) de algunos años atras...
como quien dice:"Mas vale tarde que nunca".
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #12  
Antiguo 13-11-2009
ekbadel ekbadel is offline
Registrado
 
Registrado: may 2007
Posts: 7
Poder: 0
ekbadel Va por buen camino
Smile

Cita:
Empezado por Carmelo Cash Ver Mensaje
Hola foro:
Será posible hacer una conculta que de como resultado la siguiente salida?.
La tabla es algo así:
Fecha--- Detalle--Cantidad
01/01/07 Compra_____5
02/01/07 Venta_____ -1
03/01/07 Venta_____ -3
04/01/07 Compra____ 2

Y el la salida que necesito es:
Fecha--- Detalle--Entrada--Salida--Stock
01/01/07 Compra____5______ 0_____5
02/01/07 Venta_____0______-1_____4
03/01/07 Venta_____0______-3_____1
04/01/07 Compra____2______ 0_____3

Estoy usando InterBase.
Bueno, Si alguno tiene una idea le agradeceré infinitamente.

Personalmente no se como tengas tu Tabla de Stock, en un programa ke ice para Salir de l Universidad mi tabla tiene

Periodo
idarticulo
cantidadinicial
cantidadanterior
cantidadActual

NumeroEntradas
NumeroSalidas
TotalMovimiento

y mi query la lanzo asi.

qryPeriodo.Close;
qryPeriodo.ParamByName('Periodo').AsString := dbe_periodo.Text;
qryPeriodo.Open;
if qryPeriodo.IsEmpty then
ShowMessage('error')
else
While Not qryperiodo.Eof Do Begin
qryperiodo2.Open;
qryperiodo2.Edit;
qryperiodo2Periodo.Value := dbe_sigperiodo.text;
qryperiodo2idarticulo.value := qryperiodoIdArticulo.Value;
qryperiodo2ExistenciaInicial.Value := qryperiodoExistenciaFinal.Value;
qryperiodo2ExistenciaActual.Value := qryperiodo2ExistenciaInicial.Value;
qryperiodo2CostoProInicial.Value := qryperiodoCostoProActual.Value;
qryPeriodo2.Post;
qryperiodo2.Close;
qryperiodo.Next;
end;
except
on e:exception do begin
showmessage(e.message);
end;
end;


Espero te sirva de algo lo hice con Firebird 1.5

Saludos..
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
Buscar en resultado de consulta SQL alvarocastillo SQL 6 06-11-2007 16:28:54
Store procedure: consulta con parámetros de entrada Walterdf Firebird e Interbase 1 17-08-2007 17:28:40
Acceso al resultado de una consulta SQL beatriz g SQL 2 16-08-2006 20:27:19
Visualizar el resultado de una consulta en un TXT dsa132132 Varios 11 26-10-2004 22:46:02
Resultado de Consulta en Variable ¥0n1 SQL 1 30-12-2003 01:07:29


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


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