当前位置: 代码迷 >> Sql Server >> SQL转换排序字段回调整顺序
  详细解决方案

SQL转换排序字段回调整顺序

热度:95   发布时间:2016-04-24 10:01:27.0
SQL转换排序字段来调整顺序
我有一个表大概是这样的:

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

------解决方案--------------------
引用:
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
  相关解决方案