Установление комиссии для сотрудников в зависимости от должности

Я только начал изучать sql и использую базу данных oracle 11g. Вопрос, который у меня есть, заключается в том, что у меня есть таблица сотрудников, в которой я пытаюсь обновить комиссию для каждого персонала в зависимости от должности персонала. Я хотел обновить комиссию для постоянных сотрудников до 0,04 (4%) и 0,05 (5%) для менеджеров.

Есть ли способ сделать все это в одном выражении?

То, как я это сделал, заключалось в том, что я просто обновил всю комиссию персонала:

UPDATE staff SET commission = 0.04;

затем я сделал еще один оператор обновления, чтобы обновить только ясли

UPDATE staff SET commission = 0.05 WHERE position = 'Manager';

Я думал что-то в этом роде, но это не сработает, лол.

UPDATE staff SET commission = 0.04 WHERE NOT position = 'Manager' AND SET commission = 0.05
WHERE position = 'Manager';

Спасибо за вашу помощь! очень признателен!

Вы можете сделать отступ текста на 4 пробела, чтобы он был отформатирован как код. Также добавьте пустую строку между кодом и другим текстом.

Olivier Jacot-Descombes 21.01.2019 20:09

ОК спасибо за советы! Будет делать с этого момента

needhelpwithlife 21.01.2019 20:12
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
48
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Здесь вы можете использовать выражение CASE:

UPDATE staff
SET commission = CASE WHEN position = 'Manager'
                      THEN 0.05
                      ELSE 0.04 END;

Это предполагает, что вы действительно хотите сделать общее назначение для каждого не-менеджера с комиссией 0,04.

есть еще около 9 минут, пока я не могу! Сделаю

needhelpwithlife 21.01.2019 20:12

Более гибкий подход состоит в том, чтобы иметь таблицу позиций, содержащую данные, зависящие от позиции.

CREATE TABLE position
(
    PositionID NUMBER(10) NOT NULL,
    Position NVARCHAR2(50) NOT NULL,
    Commission NUMBER(8, 4) NOT NULL
);

Затем каждый сотрудник будет ссылаться на должность через столбец

PositionID NUMBER(10) NOT NULL

Тогда вам останется только обновить комиссию в таблице позиций

UPDATE position SET Commission = 0.05 WHERE Position = 'Manager';

Это позволяет легко различать более двух позиций.

См. также: Oracle/PLSQL: внешние ключи.

В Oracle decode удобный короткий путь:

 UPDATE staff
 SET commission = DECODE(position, 'Manager', 0.05, 0.04);

Другие вопросы по теме