首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

腾挪排序位置的,能不能一条sql搞定

2013-08-27 
移动排序位置的,能不能一条sql搞定本帖最后由 x_wy46 于 2013-07-30 12:09:33 编辑一个表的排序按No字段来

移动排序位置的,能不能一条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

热点排行