Đ CASE
tuyên bố có thể hữu ích. Trong ví dụ này:
- nguồn
source
, sam, ở vị trí 8 -
target
, bob, ở vị trí 2
Thay thế các biến bằng các giá trị thực, câu lệnh sau chuyển mọi thứ xuống 2 từ nguồn, giữ nguyên giữa các thành viên, đặt mục tiêu bằng nguồn, di chuyển phần còn lại xuống:
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)
Điều đó sẽ di chuyển một cái gì đó lên danh sách. Logic tương tự có thể được áp dụng để di chuyển danh sách xuống. Và nó giả định rằng các số âm là tốt và chỉ cần quan tâm đến thứ tự tương đối.