SQL - Modificar el salario de la plantilla de todos los hospitales.

 
Vista:

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Alex (5 intervenciones) el 30/04/2017 15:56:35
Hola buenas tardes.

Tengo el siguiente problema: Quiero modificar el salario de la plantilla de todos los hospitales, Si la suma salarial de cada hospital, supera 1.000.000, bajaremos el salario 10.000. Si la suma salarial no supera el millón, subiremos el salario de los empleados en 10.000.

Este es mi código, el problema es que incrementa el salario en 10.000 todo el rato, solo quiero que aumente una vez si la suma no supera el millón, este es mi código

declare

v_hospital int;
v_suma int;
v_apellido varchar(20);
cursor consulta is
select apellido, sum(salario), hospital_cod into v_apellido, v_suma, v_hospital from plantilla group by apellido, hospital_cod order by hospital_cod ;
begin

open consulta;
loop
fetch consulta into v_apellido, v_suma, v_hospital;
exit when consulta%notfound;
if(v_suma > 1000000) then
update plantilla set salario = salario - 10000
where hospital_cod = v_hospital;
dbms_output.put_line('Bajada de salario');
else
update plantilla set salario = salario + 10000
where hospital_cod = v_hospital;
dbms_output.put_line('Subida de salario');
dbms_output.put_line('Numero de hospital:' || v_hospital || ', ' || v_apellido || ', ' || v_suma);
end if;
end loop;

close consulta;
end;

Como podría hacerlo?

Muchas gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Isaias (1921 intervenciones) el 02/05/2017 16:40:03
Hola Alex

¿En que motor de base de datos estas trabajando?

Otra cosa, tu update se podria hacer en una sola instruccion, no entiendo el porque del cursor, tambien veo que asumes que por cada v_hospital solo abra un SOLO APELLIDO al que hay que actualizar, ¿es asi?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Alex (5 intervenciones) el 02/05/2017 17:31:21
Hola buenas tardes Isaias

Estoy trabajando con un programa que se llama PL/SQL developer y el motor de base de datos que tengo es oracle.
El cursor lo hago(soy principiante en esto) para poder sacar luego por pantalla los datos y lo que quiero hacer es que por cada hospital aumente 10.000 a los empleados(apellido) pero solo una vez, ya que no me deja agrupar ni ordenar por hospital ni nombre.
En cada hospital hay mas de un empleado relacionados con su código de hospital.

Gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Isaias (1921 intervenciones) el 02/05/2017 18:21:30
Con tu respuesta me dices que NUNCA habra dos "JIMENEZ" en un mismo hospital?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Alex (5 intervenciones) el 02/05/2017 18:28:02
No, todos los empleados son diferentes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Isaias (1921 intervenciones) el 02/05/2017 19:20:10
Entonces se deberia ver algo como:

1
2
3
4
5
6
7
8
9
update plantilla
set salario = case when s.SumSalario > 1000000 then salario - 10000
case when s.SumSalario < 1000000 then salario + 10000 end
from plantilla p
inner join (
select apellido, sum(salario) as SumSalario, hospital_cod
from plantilla
group by apellido, hospital_cod ) s
on s.hospital_cod = p.v_hospital
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Alex (5 intervenciones) el 02/05/2017 20:01:50
Y donde tengo que poner este código?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Isaias (1921 intervenciones) el 02/05/2017 22:30:57
Lo ignoro, ¿donde tienes el codigo que compartiste?, el codigo es T-SQL, que hace lo que tu codio hace, solo que mas simplificado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Modificar el salario de la plantilla de todos los hospitales.

Publicado por Alex (5 intervenciones) el 03/05/2017 10:56:46
Buenos días Isaias.

El código es este:

declare

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
v_hospital int;
v_suma int;
v_apellido varchar(20);
cursor consulta is
select apellido, sum(salario), hospital_cod into v_apellido, v_suma, v_hospital from plantilla group by apellido, hospital_cod order by hospital_cod ;
begin
 
open consulta;
loop
fetch consulta into v_apellido, v_suma, v_hospital;
exit when consulta%notfound;
if(v_suma > 1000000) then
update plantilla set salario = salario - 10000
where hospital_cod = v_hospital;
dbms_output.put_line('Bajada de salario');
else
update plantilla set salario = salario + 10000
where hospital_cod = v_hospital;
dbms_output.put_line('Subida de salario');
dbms_output.put_line('Numero de hospital:' || v_hospital || ', ' || v_apellido || ', ' || v_suma);
end if;
end loop;
 
close consulta;
end;

Lo que pasa es que no se como reescribirlo para que funcione.
Gracias y un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar