Adjunto un ejemplo simple apto a SQL Server 2012, espero que te sirva de ayuda:
Código SQL:
Ver originalCREATE TABLE #Inventario(Fecha DateTime,
Producto INT,
Tipo CHAR(7),
Cantidad INT);
INSERT
INTO #Inventario
VALUES ('20130101',1,'Entrada',100),
('20130102',1,'Salida',30),
('20130103',1,'Salida',40),
('20130101',2,'Entrada',200),
('20130102',2,'Entrada',100),
('20130101',3,'Entrada',50);
SELECT *,
SUM(CASE WHEN Tipo='Entrada' THEN 1 ELSE -1 END*Cantidad)
OVER(Partition BY Producto ORDER BY Fecha
ROWS BETWEEN Unbounded Preceding AND CURRENT ROW) RunningAggregate
FROM #Inventario
ORDER BY Producto,
Fecha;