Инструкция DB2 CASE
мне нужно как-то использовать синтаксис CASE (который вне меня), чтобы повлиять на результаты базы данных на основе критериев. У меня куча гонораров в 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));
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, если хотите выполнить условное обновление для каждой строки.
редактировать
да, Но я хочу показать это без изменения данных, поэтому я могу показать сравнение двух чисел
вы имеете в виду, что хотите выполнить оператор select только с начальным значением в одном столбце и повышенным значением в другом?