Если нет дубликатов и ни одно из значений не равно NULL
, вы можете использовать case
выражения:
update meters
set reading1 = (case when reading1 = least(reading1, reading2, reading3, reading4) then 0 else reading1 end),
reading2 = (case when reading2 = least(reading1, reading2, reading3, reading4) then 0 else reading2 end),
reading3 = (case when reading3 = least(reading1, reading2, reading3, reading4) then 0 else reading3 end),
reading4 = (case when reading4 = least(reading1, reading2, reading3, reading4) then 0 else reading4 end);
Примечание. Эта проблема была бы проще, если бы показания были в отдельных строки вместо отдельных столбцов .
Вы можете обрабатывать дубликаты с помощью твика:
update meters
set reading1 = (case least(reading1, reading2, reading3, reading4)
when reading 1 then 0
else reading1
end),
reading2 = (case least(reading1, reading2, reading3, reading4)
when reading1 then reading2
when reading2 then 0
else reading2
end),
reading3 = (case least(reading1, reading2, reading3, reading4)
when reading1 then reading3
when reading2 then reading3
when reading3 then 0
else reading3
end),
reading4 = (case least(reading1, reading2, reading3, reading4)
when reading1 then reading4
when reading2 then reading4
when reading3 then reading4
when reading4 then 0
else reading2
end),