Sql 东南方?这可能会导致很多不一致的地方。“我想把rollno 4改为2,并增加即将到来的数字;-但是你的结果显示2和2s的名称发生了变化,随后的名称被向下推1。那么你使用的是什么RDBMS…?@穿刺者实际上没有改变,这是我的错误问题。 ___________

Sql 东南方?这可能会导致很多不一致的地方。“我想把rollno 4改为2,并增加即将到来的数字;-但是你的结果显示2和2s的名称发生了变化,随后的名称被向下推1。那么你使用的是什么RDBMS…?@穿刺者实际上没有改变,这是我的错误问题。 ___________,sql,Sql,东南方?这可能会导致很多不一致的地方。“我想把rollno 4改为2,并增加即将到来的数字;-但是你的结果显示2和2s的名称发生了变化,随后的名称被向下推1。那么你使用的是什么RDBMS…?@穿刺者实际上没有改变,这是我的错误问题。 ______________________________ AdmissionNo RollNo Name ______________________________ 1001 1 A 1003


东南方?这可能会导致很多不一致的地方。“我想把rollno 4改为2,并增加即将到来的数字;-但是你的结果显示2和2s的名称发生了变化,随后的名称被向下推1。那么你使用的是什么RDBMS…?@穿刺者实际上没有改变,这是我的错误问题。
______________________________ 
AdmissionNo   RollNo   Name 
______________________________
1001              1     A  
1003              2     B  
1005              3     C  
1006              4     D  
1008              5     E  
-------------------------------
AdmissionNo   RollNo   Name
-------------------------------
1001              1     A  
1006              2     D  
1003              3     B  
1005              4     C  
1008              5     E  
-------------------------------- 
DROP TABLE IF EXISTS T;
create table t
(AdmissionNo int,  RollNo int,  Name varchar(1)); 
insert into t values
(1001       ,       1   ,  'A'),  
(1003       ,       2   ,  'B'), 
(1005       ,       3   ,  'C'),  
(1006       ,       4   ,  'D'),  
(1008       ,       5   ,  'E');

select t.*,
         case when rollno = 2 then (select name from t where rollno = 4)
         when rollno > 2 and 
               rollno <> (select max(rollno) from t) then (select name from t t1 where t1.rollno < t.rollno order by t1.rollno desc limit 1)
         else name
         end    
from t;

+-------------+--------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|        1001 |      1 | A    | A                                                                                                                                                                                                                                       |
|        1003 |      2 | B    | D                                                                                                                                                                                                                                       |
|        1005 |      3 | C    | B                                                                                                                                                                                                                                       |
|        1006 |      4 | D    | C                                                                                                                                                                                                                                       |
|        1008 |      5 | E    | E                                                                                                                                                                                                                                       |
+-------------+--------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
5 rows in set (0.001 sec)
; with cte as (select a.AdmissionNo, a.RollNo, b.Name from student a
join student b on a.RollNo=b.RollNo+1
where a.RollNo between 3 and 4

union all

select a.AdmissionNo, a.RollNo, b.Name from student a
left join student b on a.RollNo+2=b.RollNo
where a.RollNo=2)
update a set a.Name = b.name
from student a
join cte b on a.rollno=b.rollno
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(admission_no INT NOT NULL PRIMARY KEY
,roll_no INT NOT NULL
,name CHAR(1) NOT NULL
);

INSERT INTO my_table VALUES
(1001,1,'A'),
(1003,2,'B'),
(1005,3,'C'),
(1006,4,'D'),
(1008,5,'E');

SELECT *
     , CASE WHEN roll_no = 4 THEN 2 
            WHEN roll_no >= 2 AND roll_no < 4 THEN roll_no + 1 
            ELSE roll_no END x FROM my_table;
+--------------+---------+------+---+
| admission_no | roll_no | name | x |
+--------------+---------+------+---+
|         1001 |       1 | A    | 1 |
|         1003 |       2 | B    | 3 |
|         1005 |       3 | C    | 4 |
|         1006 |       4 | D    | 2 |
|         1008 |       5 | E    | 5 |
+--------------+---------+------+---+
5 rows in set (0.00 sec)
UPDATE my_table x
  JOIN 
     ( SELECT *
            , CASE WHEN roll_no = 4 THEN 2 
                   WHEN roll_no >= 2 AND roll_no < 4 THEN roll_no + 1 
                   ELSE roll_no END n  
         FROM my_table
     ) y
    ON y.admission_no = x.admission_no
   SET x.admission_no = y.n;
SET @source = 1, @target = 5;

SELECT *
     , CASE WHEN roll_no = GREATEST(@source,@target) THEN LEAST(@source,@target)
            WHEN roll_no >= LEAST(@source,@target) AND roll_no < GREATEST(@source,@target) THEN roll_no + 1 
            ELSE roll_no END x 
  FROM my_table;