Een CASE
verklaring kan helpen. In dit voorbeeld:
- de
source
, sam, staat op positie 8 - het
target
, bob, staat op positie 2
Door de variabelen te vervangen door de werkelijke waarden, verschuift de volgende instructie alles 2 naar beneden vanaf de bron, laat de tussenleden zoals ze zijn, stelt het doel gelijk aan de bron, verplaatst de rest naar beneden:
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)
Dat zou iets op de lijst zetten. Soortgelijke logica kan worden toegepast om een lijst omlaag te gaan. En het gaat ervan uit dat negatieve getallen prima zijn en dat alleen de relatieve volgorde van belang is.