sql >> Databasteknik >  >> RDS >> Mysql

UPDATE-sats för att omtilldela ett kolumnvärde enligt en numerisk formel

Ett CASE uttalande kan hjälpa. I det här exemplet:

  • source , sam, är på position 8
  • target , bob, är på position 2

Genom att ersätta variablerna med de faktiska värdena flyttar följande påstående allt ned 2 från källan, lämnar mellan medlemmarna som de är, sätter målet lika med källan, flyttar resten ner:

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)

Det skulle flytta upp något på listan. Liknande logik skulle kunna användas för att flytta ner i en lista. Och det förutsätter att negativa tal är bra och att bara den relativa ordningen är av intresse.




  1. Frågeprofilering 101 — Ja, det kan verkligen förbättra din SQL-serverprestanda

  2. Anropar lagrad procedur med returvärde

  3. Python och MySQL Database:En praktisk introduktion

  4. Det gick inte att ansluta till localDB i VS2012 – Ett nätverksrelaterat eller instansspecifikt fel inträffade när en anslutning till SQL Server upprättades...