Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server menyusun ulang nomor urut ketika catatan dipindahkan ke atas atau ke bawah

Anda perlu mengetahui posisi lama sebelum Anda dapat memindahkan item. Dan logika Anda harus berbeda tergantung pada apakah item tersebut dipindahkan ke atas atau ke bawah. Garis besar proses (tidak diuji) adalah sebagai berikut:

DECLARE @Id INT = 1100000004; -- this id
DECLARE @NewPosition INT = 1; -- needs to have this position

WITH RowToMove AS (
    -- using cte instead of variables
    SELECT Plan_Id, sequence_no AS OldPosition
    FROM planRecords
    WHERE Id = @Id
), RowsToUpdate AS (
    -- columns used inside set and where clause of the update statement
    SELECT Id, sequence_no, OldPosition
    FROM planRecords
    CROSS JOIN RowToMove
    -- select rows that belong to same category and position between old and new
    WHERE planRecords.Plan_Id = RowToMove.Plan_Id AND sequence_no BETWEEN 
        CASE WHEN OldPosition < @NewPosition THEN OldPosition ELSE @NewPosition END AND
        CASE WHEN OldPosition > @NewPosition THEN OldPosition ELSE @NewPosition END
)
UPDATE RowsToUpdate SET sequence_no = CASE
    WHEN Id = @Id THEN @NewPosition -- this is the row we are moving
    WHEN OldPosition < @NewPosition THEN sequence_no - 1 -- row was moved down, move other rows up
    WHEN OldPosition > @NewPosition THEN sequence_no + 1 -- row was moved up, move other rows down
END;

Demo di DBFiddle menggunakan variabel , menggunakan CTE



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Hapus baris yang hampir duplikat

  2. Cara Memeriksa apakah Kolom yang Dihitung "Bertahan" di SQL Server

  3. Bagaimana cara menghasilkan skrip sql server 2012 di sql server 2008 r2?

  4. SQL:Nama Variabel Dinamis

  5. Metode Gratis untuk Memperbaiki Korupsi Indeks SQL Server