Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Actualizar Campo con Row Anterior

Estas en el tema de Actualizar Campo con Row Anterior en el foro de SQL Server en Foros del Web. Buenas Compañeros.. Bueno amigos necesito algo de ayuda llevo rato atorado en crear un query pero aun no allo la forma de crearlo, lo que ...
  #1 (permalink)  
Antiguo 21/06/2013, 11:02
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años
Puntos: 2
Actualizar Campo con Row Anterior

Buenas Compañeros..

Bueno amigos necesito algo de ayuda llevo rato atorado en crear un query pero aun no allo la forma de crearlo, lo que necesito hacer es lo siguiente.

Tengo una Tabla que tiene 6 registros (rows).
Código:
Com  Alta  Final
323	308	631
0	0	0
0	1	0
0	9	0
0	1	0
0	3	0
Y necesito que el campo Final del row1 lo actualie para el row2. Necesito que se quede asi.
Código:
Com  Alta  Final
323	308	631
631	0	631
631	1	632
632	9	641
641	1	642
642	3	645
Espero haberme dado a entender. Apreciaria mucho de su ayuda.

Saludos
__________________
Todos Somos Ignorantes Lo que Ocurre es que no Todos Ignoramos las Mismas Cosas
  #2 (permalink)  
Antiguo 21/06/2013, 15:34
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Actualizar Campo con Row Anterior

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. dato1 INT,
  4. dato2 INT,
  5. dato3 INT
  6. )
  7.  
  8.  
  9. INSERT INTO #temp VALUES (323,  308,    631)
  10. INSERT INTO #temp VALUES (0,    0,  0)
  11. INSERT INTO #temp VALUES (0 ,1, 0)
  12. INSERT INTO #temp VALUES (0 ,9, 0)
  13. INSERT INTO #temp VALUES (0 ,1, 0)
  14. INSERT INTO #temp VALUES (0 ,3, 0)
  15.  
  16. DECLARE @x INT
  17. DECLARE @anterior INT
  18. DECLARE @NEXT INT
  19. DECLARE @valor INT
  20.  
  21. CREATE TABLE #temp3
  22. (
  23. dato1 INT,
  24. dato2 INT,
  25. dato3 INT,
  26. rn INT
  27. )
  28.  
  29. SET @x=1
  30.  
  31. SELECT *,IDENTITY(INT,1,1) rn INTO #temp2 FROM #temp
  32.  
  33. while @x<=(SELECT COUNT(*) FROM #temp2)
  34. BEGIN
  35.     IF @x=1
  36.     BEGIN
  37.      INSERT INTO #temp3
  38.      SELECT * FROM #temp2 WHERE rn=@x
  39.     END
  40.     ELSE
  41.     BEGIN
  42.       SELECT @anterior=dato3 FROM #temp3 WHERE rn=@x-1
  43.       SELECT @valor=dato2 FROM #temp2 WHERE rn=@x    
  44.       SET @NEXT=@anterior+@valor
  45.       INSERT INTO #temp3 VALUES (@anterior,@valor,@NEXT,@x)
  46.     END
  47. SET @x=@x+1  
  48. END
  49.  
  50. SELECT * FROM #temp3
  51. DROP TABLE #temp2
  52. DROP TABLE #temp3

esto te sirve??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/06/2013, 13:55
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Actualizar Campo con Row Anterior

y de pura casualidad te funciono??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 25/06/2013, 15:39
Avatar de DarkWatch  
Fecha de Ingreso: marzo-2010
Ubicación: Mexico
Mensajes: 177
Antigüedad: 14 años
Puntos: 2
Respuesta: Actualizar Campo con Row Anterior

Si me funciono, la verdad si tenia pensado hacerlo con tablas temporales, pero pregunte en este foro para ver si me daban otra opcion aparte de las tablas temporales.
De igual manera me ayudo mucho tu aportacion, adopte su query con lo que necesitaba.

Necesitaba actualizar en la misma tabla donde tengo los datos iniciales y ya lo tengo.

Asi quedo realmente para mi caso.

Cita:
SELECT Anio, Mes, Comienzo, Altas, Final
Into #temp FROM @PERMANENCIA

declare @x int
declare @anterior int
SET @x=1

while @x<=(SELECT COUNT(*) FROM #temp)
begin
IF @x <> 1
BEGIN
SELECT @anterior = Final FROM @PERMANENCIA where Mes = @x - 1

Update @PERMANENCIA Set
Final = @anterior + Altas
Where Mes = @x
END
SET @x=@x+1
end
SELECT Anio, Mes, Comienzo, Altas, Final FROM @PERMANENCIA

Drop Table #temp
la tabla @Permanencia ya lo tengo cargado con los valores iniciales, ademas que los tengo agrupado por mes que eso me ayudo demasiado.

Muchas Gracias. y Apenas acabo de ver la respuesta jajaja.
__________________
Todos Somos Ignorantes Lo que Ocurre es que no Todos Ignoramos las Mismas Cosas

Etiquetas: campo, registro, row, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:13.