2015-12-25 3 views
2

У меня есть сотрудники таблицы, с колоннами id_departament и зарплаты так:обновление SQL и группа по

salary ID 
10000  3 
20000  3 
8000  2 
5000  1 
24000  4 
20000  1 
5000  2 
7500  4 

Я хочу построить запрос, чтобы увеличить ТОЛЬКО максимальная заработная плата для каждого Отделения с 10% и если зарплата после добавления 10% выше, чем 25000, то моя зарплата должна быть 25 000, в моем примере после добавления 10% от максимальной зарплаты в 4 Департаменте увеличится с 24000 до 25000.

мой код:

update angajati set salariul = case when salariul+10/100*salariul<25000 
then salariul+10/100*salariul else 25000 
end where salariul = (select MAX(salariul) from angajati group by 
id_departament); 

До сих пор у меня этот код, но я получаю ошибку, которая говорит:

SQL Error: ORA-01427: 01427. 00000 - "single-row subquery returns more than one row" 

ответ

0

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

SELECT Max(salariul) 
FROM angajati b 
GROUP BY id_departament 

Чтобы исправить это нужно correlatesub-query

UPDATE angajati A 
SET salariul = CASE 
        WHEN salariul + 10/100 * salariul < 25000 THEN 
        salariul + 10/100 * 
           salariul 
        ELSE 25000 
        END 
WHERE salariul = (SELECT Max(salariul) 
        FROM angajati b 
        WHERE a.id_departament = b.id_departament); 
+1

Ошибка SQL: ORA-00904: «A». «ID_DEPARTAMENT»: 00904. 00000 - "% s: недопустимый идентификатор" –

+0

сейчас проверено опечатка –

+1

спасибо, человек, он работает, оценил! –