日期:2014-05-17  浏览次数:20615 次

移动排序位置的,能不能一条sql搞定
本帖最后由 x_wy46 于 2013-07-30 12:09:33 编辑
一个表的排序按No字段来,如下(当然也有其他字段,按No排序)
No
1
2
3
6
7
10
……
也就是No不一定连续(但是可以确定唯一),现在要求交换任意两个No的位置,能不能一句sql搞定

比如6要向上移动一个位置,即要排在3前面,则吧6的No更新为3,3的No更新为6(或者3直接加1)

要一句sql搞定的
排序

------解决方案--------------------
update 表 set no=case when no=3 then 6 else 3 end where no in (3,6)
------解决方案--------------------

update [表名]
 set [No]=case when [No]=3 then 6 when [No]=6 then 3 end
 where [No] in(3,6)

------解决方案--------------------
DECLARE @id1 INT, @id2 INT
SELECT @id1 = 3, @id2 = 6
UPDATE dbo.test2
SET id = (CASE id WHEN @id1 THEN @id2 ELSE @id1 END)
WHERE id = @id1
OR id = @id2

------解决方案--------------------

SELECT *
FROM [表名]
ORDER BY CHARINDEX(CAST(NO AS NVARCHAR(20)),'6,3')

------解决方案--------------------
可以,用子查询应该可以办到,假如上移 你找到这个小于这个code的最大值,然后 更新对应的Code.
如:
No
1
2
3
6
7
10
 把6移到3 ,3移到6 找到小于6 的最大值就是3 .......
------解决方案--------------------
update tb set no=case when no=3 then 6 when no=6 then 3 else no end