Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   ¿Como restar campos y obtener un tercero? (https://www.clubdelphi.com/foros/showthread.php?t=82566)

JXJ 19-03-2013 20:05:19

¿Como restar campos y obtener un tercero?
 
Estoy usando sql server 2005 express y 2008 express r2

quiero obtener la existencia de cada articulo por almacen

Tengo una consulta que me trae todos los articulos de un almacen

eso lo hago con subconsultas una me da la suma de todos las entradas
y otra me da todos las salidas

¿como se puede restar las entradas menos las salidas y obtener una tercer columna
que sea la existencia del articulo en ese almacen ?


Esta es la query que uso
Código SQL [-]
select *, 
          isnull(
(
select sum(MOV_Cantidad) from Movimientos inner join TiposMovimientos on Movimientos.TMO_Id = TiposMovimientos.TMO_Id 
where ART_Id = Variantes.VAR_Id and ALM_Id in (7) and TMO_Tipo = 'Entrada'), 0) as Entrada, 
           isnull((

select sum(MOV_Cantidad) from Movimientos inner join TiposMovimientos on Movimientos.TMO_Id = TiposMovimientos.TMO_Id
 where ART_Id = Variantes.VAR_Id and ALM_Id in (7) and TMO_Tipo = 'Salida'), 0) as Salida 
           from Variantes where ART_Id = 76032


gracias por su atencion. :D

TOPX 19-03-2013 20:36:00

Cita:

Empezado por JXJ (Mensaje 457113)
¿como se puede restar las entradas menos las salidas y obtener una tercer columna
que sea la existencia del articulo en ese almacen ?

Yo lo haría con algo así (después de adivinar la estructura de sus tablas):
Código SQL [-]
select 
  sum(
    case when TMO_Tipo = 'Entrada' then MOV_Cantidad 
    else null end
  ) as Entrada,
  sum(
    case when TMO_Tipo = 'Salida' then MOV_Cantidad 
    else null end
  ) as Salida,
  sum(
    case when TMO_Tipo = 'Entrada' then MOV_Cantidad 
    else MOV_Cantidad*(-1) end
  ) as Existe 
from Variantes
inner join Movimientos 
  on Variantes.VAR_Id = Movimientos.ART_Id
inner join TiposMovimientos 
  on Movimientos.TMO_Id = TiposMovimientos.TMO_Id 
where ALM_Id in (7) 
  and ART_Id = 76032
-

JXJ 19-03-2013 21:04:16

hola TOPX.
gracias por tu dedicacion y tiempo


no entiendo nada tu codigo..

asi nada mas poneindo tu query en el ms sql maestro me da error

aqui
Código SQL [-]
on Variantes.VAR_Id = Movimientos.ART_Id
que ambiguos declaration ART_Id

no se podria simplemente

restar el campo ya existente
que manejo como
as Entrada,

as Salida

( Entrada - Salida ) as totalexi

TOPX 19-03-2013 21:57:15

Como no conozco la estructura de su base de datos, traté de adivinar la relación entre sus tablas y omití especificar la dueña de cada campo; como Ud. sí la conoce, podría corregirlo.
Código SQL [-]
ART_Id = 76032
Igual, la idea era que a partir de un único select se tuviera la sumatoria de las entradas y las salidas, utilizando un CASE para diferenciar lo que suma y lo que resta. Vea:-

JXJ 19-03-2013 22:18:27

Gracias TOPX..

En eso ando ahora. revisando tus enlaces.

selvin720 29-08-2016 11:05:39

hola JXJ mira es tan sencillo como hacer esto:

select medicamento, entradas, salidas, (entradas)-(salidas) as Existente
from medicinas


este es un ejemplo con una tabla de medicinas, da igual de que sea el inventario que estas haciendo, en este caso se restan las salidas de las entradas y atravez de un alias se obtiene un tercer campo llamado "Existente".

el resultado del select seria el siguiente:

medicamento___ entradas_____salidas______Existente(alias)
aspirina__________100___________20____________80
aleve____________200___________50____________150
panadol__________300___________80____________220



saludos espero te sirva^\||/

olbeup 30-08-2016 09:44:31

Hola JXJ,

También lo que puedes hacer es una tabla en memoria con los campos que necesites incluyendo, "Entradas", "Salidas" y, después hacer la SQL para hacer la resta entre ambos campos.

Cuando en una SQL intervienen mas de una base de datos, utiliza Alias, sera menos engorrosa y mas facil de entender.

Un saludo.

mamcx 30-08-2016 17:02:50

Podrias poner un ejemplo de como estan tus estructuras?


La franja horaria es GMT +2. Ahora son las 14:19:16.

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