Agregar campo en columna

Hola,
Tengo una base de datos de la siguiente manera:
NOM_A NOM_B
1 25
0 68
0 85
2 95
0 55
Lo que deseo es poder reemplazar el cero de la columna NOM_A por el valor diferente a cero en la posiscion inmediata superior, es decir:
NOM_A NOM_B
1 25
1 68
1 85
2 95
2 55

1 Respuesta

Respuesta
1
¿Qué columna seria tu base para realizar dicha actualizacion?, ¿Tienes alguna PRIMARY KEY?
Hola,
No tengo una primary key y con respecto a tu ptro pregunta, sinceramente... no entiendo. Supongo que la que va a cambiar. Pero bueno, de todas maneras ya encontre una manera de hacerlo (con cursores):
DECLARE @NOM_A SMALLINT,@NOM_B SMALLINT,@TEMP SMALLINT
DECLARE MICURSOR CURSOR LOCAL FORWARD_ONLY FOR SELECT NOM_A,NOM_B FROM
#TABTEMP
OPEN MICURSOR
FETCH NEXT FROM MICURSOR INTO @NOM_A,@NOM_B
WHILE @@FETCH_STATUS=0
BEGIN
IF (@NOM_A<>0)
BEGIN
UPDATE #TABTEMP
SET @[email protected]_ADADP WHERE CURRENT OF MICURSOR
END
IF (@NOM_A=0)
BEGIN
UPDATE #TABTEMP
SET [email protected] WHERE CURRENT OF MICURSOR
END
FETCH NEXT FROM MICURSOR INTO @NOM_A,@NOM_B
END
CLOSE MICURSOR
DEALLOCATE MICURSOR
Como ves, me he loqueado con esto.. y aunque sirve, quisiera un metodo mas sencillo.
Saludos
Rolando
Sin Cursores:
-- Creo mi tabla e inserto mis registros de prueba.
CREATE TABLE #Pruebas (MyPK INT PRIMARY KEY IDENTITY(1,1), Nom_A int, Nom_B int)
INSERT INTO #Pruebas VALUES(1,25)
INSERT INTO #Pruebas VALUES(0,68)
INSERT INTO #Pruebas VALUES(0,85)
INSERT INTO #Pruebas VALUES(2,95)
INSERT INTO #Pruebas VALUES(0,55)
INSERT INTO #Pruebas VALUES(0,32)
INSERT INTO #Pruebas VALUES(3,10)
INSERT INTO #Pruebas VALUES(0,20)
INSERT INTO #Pruebas VALUES(0,30)
-- Genero un Loop para la actualizacion.
BEGIN TRAN
DECLARE @MyPos INT, @MyNom_A INT, @MyNext INT
SET @MyPos = 1
WHILE EXISTS(SELECT Nom_A FROM #Pruebas WHERE Nom_A = 0)
BEGIN
SELECT @MyNom_A = Nom_A FROM #Pruebas WHERE MyPK <= @MyPos AND Nom_A > 0
SET @MyNext = ISNULL((SELECT TOP 1 MyPK FROM #Pruebas WHERE MyPK > @MyPos AND Nom_A > 0),99999)
UPDATE #Pruebas SET Nom_A = @MyNom_A WHERE MyPK BETWEEN @MyPos AND @MyNext AND Nom_A = 0
SELECT @MyPos = @MyNext
CONTINUE
END

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas