jueves, 21 de mayo de 2015

Ejercicios con IF y Funciones en SQL Server - 2 de 2



4. Calcular la media de años que llevan los empleados en la empresa. Si la media supera los 15 años, subir el sueldo en 20000 pts a los empleados que esten en la primera decada desde la fundación de la empresa. Si no se supera esta media, se les subirá el sueldo a los empleados que no estén en la primera decada de la empresa. Mostrar los datos después de la actualización con formato de Fecha Completa: Martes 19 Octubre 1978.

DECLARE @MEDIA INT,@MINFECHA SMALLDATETIME,@DIF SMALLDATETIME
SELECT @MINFECHA = MIN(FECHA_ALT) FROM EMP
SELECT @MEDIA = AVG(DATEDIFF(YY,FECHA_ALT,GETDATE())) FROM EMP
SELECT @DIF = DATEADD(YY,10,@MINFECHA)
IF (@MEDIA > 15)
BEGIN
UPDATE EMP SET SALARIO = SALARIO + 20000 WHERE FECHA_ALT BETWEEN
@MINFECHA AND @DIF
SELECT DATENAME(WEEKDAY,FECHA_ALT) + ' '
+ CAST(DATEPART(DAY,FECHA_ALT) AS CHAR(2)) + ' '
+ DATENAME(MONTH,FECHA_ALT) + ' '
+ DATENAME(YEAR,FECHA_ALT) AS [FECHA COMPLETA]
,APELLIDO
,SALARIO,'ACTUALIZACION COMPLETA' AS [ACTUALIZACION] FROM EMP
WHERE FECHA_ALT BETWEEN @MINFECHA AND @DIF
ORDER BY FECHA_ALT
END
ELSE
BEGIN
UPDATE EMP SET SALARIO = SALARIO + 10000 WHERE FECHA_ALT > @DIF
SELECT DATENAME(WEEKDAY,FECHA_ALT) + ' '
+ CAST(DATEPART(DAY,FECHA_ALT) AS CHAR(2)) + ' '
+ DATENAME(MONTH,FECHA_ALT) + ' '
+ DATENAME(YEAR,FECHA_ALT) AS [FECHA COMPLETA]
,APELLIDO
,SALARIO,'ACTUALIZACION COMPLETA' AS [ACTUALIZACION]
FROM EMP
WHERE FECHA_ALT > @DIF
ORDER BY FECHA_ALT
END



5. Mostrar los años de antigüedad de los empleados, la fecha de alta, y otro campo donde introduciremos los trienios que lleva en la empresa el trabajador hasta 7 como máximo y cuatro como mínimo. Si está fuera de este intervalo escribiremos 'No Bonificable'.

SELECT APELLIDO, FECHA_ALT
,'ANTIGÜEDAD' = CONVERT(NVARCHAR(50)
,DATEDIFF(YY,FECHA_ALT, GETDATE())) + ' AÑOS'
,'TRIENIOS' = CASE DATEDIFF(YY,FECHA_ALT, GETDATE()) / 3
WHEN '4' THEN 'CUATRO'
WHEN '5' THEN 'CINCO'
WHEN '6' THEN 'SEIS'
WHEN '7' THEN 'SIETE'
ELSE 'NO BONIFICABLE'
END
FROM EMP



6. Calculando la suma de salarios de los directores, subir el sueldo a los que cobren entre el minimo salario y 250000 pts.
Mantener el sueldo a los directores si la suma está entre 1200000 y 1300000.
Bajar el sueldo a los que se encuentren entre 250000 y el máximo salario.
Mostrar los datos actualizados antes y después de los empleados que se actualicen.

IF (SELECT SUM(SALARIO) FROM EMP WHERE OFICIO = 'DIRECTOR')
< 1200001
BEGIN
PRINT 'SUELDO SUBIDO A LOS DIRECTORES'
DECLARE @MINSAL INT
SELECT @MINSAL = MIN(SALARIO) FROM EMP WHERE OFICIO =
'DIRECTOR'
PRINT 'ANTES DE LA ACTUALIZACIÓN'
SELECT TOP 3 WITH TIES SALARIO,APELLIDO FROM EMP WHERE
OFICIO = 'DIRECTOR'
GROUP BY SALARIO,APELLIDO
HAVING SALARIO BETWEEN @MINSAL AND 250000
ORDER BY SALARIO
UPDATE EMP SET SALARIO = SALARIO * 1.1
WHERE OFICIO = 'DIRECTOR'
AND
SALARIO BETWEEN @MINSAL AND 250000
UPDATE EMP SET SALARIO = SALARIO * 1.1 WHERE OFICIO =
'DIRECTOR'
PRINT 'DESPUÉS DE LA ACTUALIZACIÓN'
SELECT TOP 3 WITH TIES SALARIO,APELLIDO FROM EMP WHERE
OFICIO = 'DIRECTOR'
GROUP BY SALARIO,APELLIDO
HAVING SALARIO BETWEEN @MINSAL AND 250000
ORDER BY SALARIO
END
ELSE
IF (SELECT SUM(SALARIO) FROM EMP WHERE OFICIO = 'DIRECTOR')
BETWEEN 1200001 AND 1300000
BEGIN
PRINT 'MISMO SUELDO A LOS DIRECTORES'
SELECT SALARIO,APELLIDO FROM EMP WHERE OFICIO = 'DIRECTOR'
ORDER BY SALARIO
END
ELSE
IF (SELECT SUM(SALARIO) FROM EMP WHERE OFICIO = 'DIRECTOR')
> 1300001
BEGIN
PRINT 'SUELDO BAJADO A LOS DIRECTORES'
DECLARE @MAXSAL INT
SELECT @MAXSAL = MAX(SALARIO) FROM EMP WHERE OFICIO =
'DIRECTOR'
PRINT 'ANTES DE LA ACTUALIZACIÓN'
SELECT TOP 3 WITH TIES SALARIO,APELLIDO FROM EMP WHERE
OFICIO = 'DIRECTOR'
GROUP BY SALARIO,APELLIDO
HAVING SALARIO BETWEEN 200000 AND @MAXSAL
ORDER BY SALARIO DESC
UPDATE EMP SET SALARIO = SALARIO / 1.1
WHERE OFICIO = 'DIRECTOR'
AND
SALARIO BETWEEN 200000 AND @MAXSAL
PRINT 'DESPUÉS DE LA ACTUALIZACIÓN'
SELECT TOP 3 WITH TIES SALARIO,APELLIDO FROM EMP WHERE
OFICIO = 'DIRECTOR'
GROUP BY SALARIO,APELLIDO
HAVING SALARIO BETWEEN 200000 AND @MAXSAL
ORDER BY SALARIO DESC
END




Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada