Я должен так или иначе использовать синтаксис СЛУЧАЯ (который является вне меня) влиять на результаты базы данных на основе критериев. У меня есть набор роялти в 0.# форма (роялти), у меня есть идентификатор заголовка # (title_id), и я должен показать новое увеличение роялти так, чтобы я мог использовать данные.
IF: they have a current royalty of 0.0 - 0.1 = 10% raise
IF: they have 0.11 - 0.15 = 20% raise
IF: royalty >= 0.16 = 20% raise
Любая справка очень ценилась бы.
create table royalites (
title_id char(6),
lorange integer,
hirange integer,
royalty decimal(5,2));
На самом деле вам не нужно использовать оператор 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;
Я не знаю точного синтаксиса DB2, ни отличается он от Oracle или SQL Server, но я бы предположил что-то вроде следующего:
update royalties as r
set r.royalty = r.royalty * (
select case
when r.royalty between 0.0 and 0.1 then 1.1
when r.royalty > 0.11 then 1.2
and
from royalties
)
Что-то в этом коде могло бы сработать, если я правильно понимаю вопрос. Это будет применять повышение для каждой строки при каждом запуске обновления. Вы можете добавить предложение where, если хотите выполнить условное обновление для каждой строки.
РЕДАКТИРОВАТЬ
Да, но я хочу показать это без изменения данных, поэтому я могу показать сравнение двух чисел
Вы имеете в виду, что хотите выполнить оператор выбора только с начальным значением в одном столбец, а повышенное значение в другом?