Ayuda con esta UPDATE
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
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
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
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