SQL疑难问题
请教:
数据表
- SQL code
CREATE TABLE t1(id INT IDENTITY(1,1),SortValue INT)INSERT INTO T1(SortValue)SELECT 1 UNION ALLSELECT 2 UNION ALLSELECT 3 UNION ALLSELECT 6 UNION ALLSELECT 7 UNION ALLSELECT 8 UNION ALLSELECT 9 UNION ALLSELECT 20
实现修改SortValue后,保证SortValue是正确的,即
1.如果把ID为4的SortValue改为4,根据现有数据的情况,直接改成4即可;
2.如果把ID为4的SortValue改为7,根据现有数据的情况,则ID为5的要变成8,ID=6的变为9,7的变10,8的不变;
3.如果把ID为4的SortValue改为2,根据现有数据的情况,则ID为2的要变成3,ID=3的变为4,依次类推;
[解决办法]
- SQL code
declare @id int = 4declare @change int = 2 -- 4,7declare @group int = (select id-SortValue from T1 where SortValue=@change)update T1 set SortValue = case id when @id then @change else SortValue+1 end where id=@id or id-SortValue=@group and SortValue>=@changeselect * from T1