Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2013
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
¿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.

Última edición por Casimiro Notevi fecha: 19-03-2013 a las 20:30:23.
Responder Con Cita
  #2  
Antiguo 19-03-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Cita:
Empezado por JXJ Ver Mensaje
¿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
-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #3  
Antiguo 19-03-2013
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 19-03-2013
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
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:-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 19-03-2013
JXJ JXJ is offline
Miembro
 
Registrado: abr 2005
Posts: 2.475
Poder: 22
JXJ Va por buen camino
Gracias TOPX..

En eso ando ahora. revisando tus enlaces.
Responder Con Cita
  #6  
Antiguo 29-08-2016
selvin720 selvin720 is offline
Registrado
NULL
 
Registrado: ago 2016
Posts: 1
Poder: 0
selvin720 Va por buen camino
Thumbs up

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
Responder Con Cita
  #7  
Antiguo 30-08-2016
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #8  
Antiguo 30-08-2016
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
Podrias poner un ejemplo de como estan tus estructuras?
__________________
El malabarista.
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
Como Restar campos de dos tablas ZLEON SQL 1 27-08-2008 07:52:00
Como obtener la HORA al Restar minutos en campo TIME ???? AGAG4 Firebird e Interbase 3 20-02-2008 18:55:11
Restar Campos En Paradox Sir_Roc Varios 1 06-02-2006 18:25:40
Como obtener los Campos de una Tabla ? mtpedro Conexión con bases de datos 1 27-10-2004 02:11:00
Restar Campos junior Conexión con bases de datos 3 04-08-2003 23:47:49


La franja horaria es GMT +2. Ahora son las 20:53:52.


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