Ayuda con esta UPDATE

marcos1981
13 de Diciembre del 2004
Actualizar los empleados que menos ganan en cada oficio
aumentando su salario un 3% de la media de su oficio en su mismo departamento

Actualizar la comisión de los empleados que más ganan en cada oficio
incrementandola en 150 euros

Tablas a utilizar: EMP

La parte de la comisión está bien.El problema me surge a la hora de
hacer la parte del salario,porque me da un fallo en los GROUP BY.


UPDATE EMP A
SET A.SAL = (SELECT DECODE(A.SAL-MINIMO,0,A.SAL+0.03*MEDIA,A.SAL)
FROM
(SELECT JOB,MIN(SAL) MINIMO FROM EMP GROUP BY JOB),
(SELECT DEPTNO,AVG(SAL) MEDIA FROM EMP GROUP BY JOB,DEPTNO)
WHERE JOB=A.JOB AND DEPTNO=A.DEPTNO),
A.COMM = (SELECT DECODE(A.SAL-MAXIMO,0,NVL(A.COMM,0)+150,A.COMM)
FROM(SELECT JOB,MAX(SAL) AS MAXIMO FROM EMP GROUP BY JOB)
WHERE JOB=A.JOB);


El fallo es el siguiente:

la subconsulta de una sola fila devuelve más de una fila



Alomejor la pregunta es un poco estúpida,pero necesito resolverlo.

Gracias por anticipado

abouza
13 de Diciembre del 2004
Hola

1 UPDATE EMP A
2 SET A.SAL =
3 (SELECT
4 DECODE(A.SAL-MINIMO,0,A.SAL+0.03*MEDIA,A.SAL)
5 FROM (SELECT JOB,MIN(SAL) MINIMO
6 FROM EMP GROUP BY JOB),
7 (SELECT DEPTNO,AVG(SAL) MEDIA
8 FROM EMP GROUP BY JOB,DEPTNO)
9 WHERE JOB=A.JOB AND DEPTNO=A.DEPTNO),
10 A.COMM = (SELECT DECODE(A.SAL-MAXIMO,
11 0,NVL(A.COMM,0)+150,A.COMM)
12 FROM(SELECT JOB,MAX(SAL) AS MAXIMO
13 FROM EMP GROUP BY JOB)
14 WHERE JOB=A.JOB);

En la subconsulta de la linea 3 a la 9 te falta relacionar el JOB con el Departamento


Te pongo en minusculas los cambios

UPDATE EMP A
SET A.SAL =
(SELECT
DECODE(A.SAL-MINIMO,0,A.SAL+0.03*MEDIA,A.SAL)
FROM (SELECT JOB,MIN(SAL) MINIMO
FROM EMP GROUP BY JOB) x,
(SELECT job, DEPTNO,AVG(SAL) MEDIA
FROM EMP GROUP BY JOB,DEPTNO) y
WHERE JOB=A.JOB AND DEPTNO=A.DEPTNO
and x.job = y.job),
A.COMM = (SELECT DECODE(A.SAL-MAXIMO,
0,NVL(A.COMM,0)+150,A.COMM)
FROM(SELECT JOB,MAX(SAL) AS MAXIMO
FROM EMP GROUP BY JOB)
WHERE JOB=A.JOB);

Creo que con eso se te solucionaria el problema

Un saludo

marcos1981
13 de Diciembre del 2004
Muchisimas gracias,estaba a puntito de caer en la desesperación