На самом деле, вы не должны использовать оператор case
:
update royalties set royalty = royalty * 1.2
where royalty >= 0.16;
update royalties set royalty = royalty * 1.2
where royalty >= 0.11 and royalty < 0.16;
update royalties set royalty = royalty * 1.1
where royalty < 0.11;
(под транзакционным контролем, если вам нужна атомарность). Возможно, вы могли бы объединить первые два, если они имеют тот же множитель, что и ваши состояния вопроса.
Это работает, гарантируя, что вы сначала делаете более высокие значения и ограничивает то, на какие строки воздействует предложение where
.
Если вы чувствуете, что должны , используйте выражение case
:
update royalties set royalty =
case when royalty >= 0.16 then royalty * 1.2
case when royalty >= 0.11 and royalty < 0.16 then royalty * 1.2
case when royalty < 0.11 then royalty * 1.1
end;
Чтобы просто изменить то, что вы вытаскиваете из таблицы (вместо того, чтобы менять саму таблицу) и сравнить ее с текущим:
select title_id, lorange, hirange, royalty,
case when royalty >= 0.16 then royalty * 1.2
case when royalty >= 0.11 and royalty < 0.16 then royalty * 1.2
case when royalty < 0.11 then royalty * 1.1
end as new_royalty
from royalties;