Sebuah CASE
pernyataan dapat membantu. Dalam contoh ini:
source
, sam, berada di posisi 8target
, bob, ada di posisi 2
Mengganti variabel dengan nilai aktual, pernyataan berikut menggeser semuanya ke bawah 2 dari sumber, membiarkan antar anggota apa adanya, menetapkan target sama dengan sumber, memindahkan sisanya ke bawah:
postgres=> SELECT * FROM test order by sortval;
name | sortval
------+---------
bob | 2
tom | 4
mary | 6
sam | 8
tim | 10
(5 rows)
postgres=> UPDATE test
postgres-> SET sortval = CASE WHEN sortval <= 2 THEN sortval - 2
postgres-> WHEN sortval = 8 THEN 2
postgres-> WHEN sortval >= 8 THEN sortval - 2
postgres-> ELSE sortval
postgres-> END;
UPDATE 5
postgres=> SELECT * FROM test order by sortval;
name | sortval
------+---------
bob | 0
sam | 2
tom | 4
mary | 6
tim | 8
(5 rows)
Itu akan memindahkan sesuatu ke atas daftar. Logika serupa dapat diterapkan untuk menurunkan daftar. Dan itu mengasumsikan angka negatif baik-baik saja dan hanya urutan relatif yang menarik.