By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
CREATE TABLE student (
id int,
name varchar(128)
);
INSERT INTO student (id,name) VALUES
(1,'John'),
(2,'Bob'),
(3,'Alice'),
(4,'Don'),
(5,'Eve');
5 rows affected
UPDATE s
SET name = CASE WHEN rn % 2 = 0 THEN prevName ELSE nextName END
FROM (
SELECT *,
prevName = LAG(name, 1, name) OVER (ORDER BY id),
nextName = LEAD(name, 1, name) OVER (ORDER BY id),
-- the extra parameters mean you get the current value if there is no next row
rn = ROW_NUMBER() OVER (ORDER BY id)
FROM student
) s
5 rows affected
select * from student
id | name |
---|---|
1 | Bob |
2 | John |
3 | Don |
4 | Alice |
5 | Eve |