Código SQL:
Ver originalCREATE TABLE #temp
(
codigo VARCHAR(20),
quantity INT,
doc VARCHAR(20)
)
CREATE TABLE #resultado
(
codigo VARCHAR(20),
quantity INT,
doc VARCHAR(20),
acumulado INT
)
INSERT INTO #temp VALUES ('301262519',32,'SUM')
INSERT INTO #temp VALUES ('301262519',52,'SUM')
INSERT INTO #temp VALUES ('301262519',5,'RES')
INSERT INTO #temp VALUES ('301262519',2,'RES')
INSERT INTO #temp VALUES ('301262519',10,'IGU')
INSERT INTO #temp VALUES ('301262519',10,'RES')
INSERT INTO #temp VALUES ('301262519',6,'IGU')
INSERT INTO #temp VALUES ('301262519',6,'IGU')
SELECT *,ROW_NUMBER() OVER(partition BY codigo ORDER BY codigo) AS rn INTO #temp2 FROM #temp
DECLARE @x INT
DECLARE @doc VARCHAR(20)
DECLARE @acumulado INT
DECLARE @cantidad INT
SET @x=1
SET @cantidad=0
SET @acumulado=0
while @x<=(SELECT COUNT(*) FROM #temp2)
BEGIN
SELECT @doc=doc,@cantidad=quantity FROM #temp2 WHERE rn=@x
IF(@doc='sum')
SET @acumulado=@acumulado+@cantidad
IF(@doc='res')
SET @acumulado=@acumulado-@cantidad
IF(@doc='igu')
SET @acumulado=@acumulado
INSERT INTO #resultado
SELECT codigo,@cantidad,@doc,@acumulado FROM #temp2 WHERE rn=@x
SET @x=@x+1
END
SELECT * FROM #resultado
Como tus datos se restan, se suman y se dejan igual no es tan facil poner todo eso en un solo query por lo que te recomiendo hacer un procedure o funcion donde pongas el codigo que te envio :)