Я только начал изучать 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';
Спасибо за вашу помощь! очень признателен!
ОК спасибо за советы! Будет делать с этого момента


Здесь вы можете использовать выражение CASE:
UPDATE staff
SET commission = CASE WHEN position = 'Manager'
THEN 0.05
ELSE 0.04 END;
Это предполагает, что вы действительно хотите сделать общее назначение для каждого не-менеджера с комиссией 0,04.
есть еще около 9 минут, пока я не могу! Сделаю
Более гибкий подход состоит в том, чтобы иметь таблицу позиций, содержащую данные, зависящие от позиции.
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);
Вы можете сделать отступ текста на 4 пробела, чтобы он был отформатирован как код. Также добавьте пустую строку между кодом и другим текстом.