обновление таблицы условно значениями из группы с помощью подзапроса в Oracle - PullRequest
2 голосов
/ 05 мая 2010

проблема в том, чтобы обновить зарплату всех сотрудников на 50%, которые работали над 5 или более 5 проектами, на 30% (> = 3 проекта), на 20% (> = 1 проекта) количества проектов получается при выполнении группы по запросу в EMPLOYEE_PROJECT_HISTORY;

я пробовал эти запросы

update emp set emp.sal=
case 
when jemp.pcount >=5 then emp.sal+ (emp.sal*50)/100
when jemp.pcount >=3 then emp.sal+ (emp.sal*30)/100
when jemp.pcount >=1 then emp.sal+ (emp.sal*20)/100
else emp.sal+ (emp.sal*20)/100
end 
from employee emp join (select empno as jempno,count(projectno) as pcount from EMPLOYEE_PROJECT_HISTORY by empno) jemp on emp.empno=jemp.jempno ;

update employee a set a.sal= case (select count(b.projectno) as pcount from EMPLOYEE_PROJECT_HISTORY b group by b.empno ) 
    when b.pcount >5 then
    a.sal = a.sal+ (a.sal*50)/100
    when pcount >3 then
    a.sal = a.sal+ (a.sal*30)/100
    when pcount >1 then
    a.sal = a.sal+ (a.sal*20)/100
    end;

1 Ответ

2 голосов
/ 05 мая 2010

Вы не сможете обновить объединение, если оно содержит предложение GROUP BY в Oracle. Вы можете использовать встроенный подзапрос, например:

UPDATE employee e
   SET sal = sal * (SELECT CASE
                              WHEN COUNT(*) >= 5 THEN
                               1.5
                              WHEN COUNT(*) >= 3 THEN
                               1.3
                              WHEN COUNT(*) >= 1 THEN
                               1.2
                              ELSE
                               1
                           END
                      FROM employee_project_history eph
                     WHERE eph.empno = e.empno);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...