我有一个表大概是这样的:
Table
id ,name,sort
1,A,1
2,b,2
3,c,3
4,d,4
我是根据sort字段来进行排序的,如果我想把id为2的调到第一条去,希望转换一个参数把1和2的sort字段进行替换实现
比如调整2 ,传递一个参数moveup,2或者传递参数movedown,1。 实现下面的显示
id ,name,sort
2,b,1
1,A,2
3,c,3
4,d,4
------解决方案--------------------
CREATE TABLE table1(id int, name varchar(1), sort int)
GO
INSERT INTO table1
SELECT 1,'A',1 UNION ALL
SELECT 2,'b',2 UNION ALL
SELECT 3,'c',3 UNION ALL
SELECT 4,'d',4
GO
DECLARE @id int
DECLARE @sort int
SET @id = 2
--moveup(@id)
SELECT @sort = sort
FROM table1
WHERE id = @id
IF @sort>1
BEGIN
UPDATE table1 SET sort=@sort WHERE sort=@sort-1
UPDATE table1 SET sort=@sort-1 WHERE id=@id
END
SELECT *
FROM table1
ORDER BY sort
id name sort
----------- ---- -----------
2 b 1
1 A 2
3 c 3
4 d 4
------解决方案--------------------
IF object_id('test') IS NOT NULL
DROP TABLE test
GO
CREATE TABLE test
(
ID INT PRIMARY KEY NOT NULL ,
[Name] VARCHAR(16),
Sort INT
)
INSERT INTO test(ID,[Name],Sort)
SELECT 1,'a',1 UNION ALL
SELECT 2,'b',2 UNION ALL
SELECT 3,'c',3 UNION ALL
SELECT 4,'d',4
DECLARE @i INT
SET @i = 2 -- 将id = 2的行提升到第一行;
-- 修改id,将指定行提升到第一行
SELECT ID,NAME,IDENTITY(INT,1,1) 'Sort' INTO #t FROM
(
SELECT * FROM test WHERE id = @i
UNION ALL (
SELECT * FROM test
EXCEPT
SELECT * FROM test WHERE id = @i)
) t
SELECT * FROM #t
DROP TABLE #t
ID NAME Sort
----------- ---------------- -----------
2 b 1
1 a 2
3 c 3
4 d 4
------解决方案--------------------