Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/03/2014, 10:42
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 9 meses
Puntos: 774
Respuesta: devolver la diferencia de valor entre una fila siguente

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. debe INT,
  4. haber INT,
  5. saldo INT
  6. )
  7.  
  8.  
  9. CREATE TABLE #resultado
  10. (
  11. debe INT,
  12. haber INT,
  13. saldo INT,
  14. rn INT IDENTITY(1,1)
  15. )
  16.  
  17.  
  18. INSERT INTO #temp VALUES (1000,750,350)
  19. INSERT INTO #temp VALUES (5000,6500,NULL)
  20. INSERT INTO #temp VALUES (760 ,1000,NULL)
  21. INSERT INTO #temp VALUES (10560 ,5000,NULL)
  22. INSERT INTO #temp VALUES (2300 ,1560,NULL)
  23.  
  24. SELECT *, IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #temp
  25.  
  26. DECLARE @x INT
  27. DECLARE @saldo INT
  28. DECLARE @suma INT
  29. SET @x=1
  30. SET @saldo=0
  31. while (@x<=(SELECT COUNT(*) FROM #temp2))
  32. BEGIN
  33. IF @x=1
  34. BEGIN
  35.     SELECT @saldo=saldo FROM #temp2 WHERE rn=@x
  36.     INSERT INTO #resultado
  37.         SELECT debe,haber, @saldo AS saldo FROM #temp2 WHERE rn=@x
  38. END
  39. ELSE
  40. BEGIN
  41.    
  42.     INSERT INTO #resultado
  43.         SELECT debe,haber,debe-haber + @saldo AS saldo FROM #temp2 WHERE rn=@x
  44.  
  45.     SELECT @saldo=saldo FROM #resultado WHERE rn=@x
  46.        
  47. END
  48. SET @x=@x+1
  49. END
  50.  
  51. SELECT * FROM #resultado

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me