Oracle - CONSULTA

 
Vista:
sin imagen de perfil
Val: 5
Ha disminuido su posición en 4 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

CONSULTA

Publicado por rodic (3 intervenciones) el 26/02/2019 21:07:03
Hola a todos,

necesito hacer una consulta para obtener "Nombre, edad de los empleados y nombre del departamento de los empleados que han trabajado en más de un departamento" y para ello he creado la siguiente sentencia:

SELECT EMPLEADOS.NOMBRE, (TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - TO_NUMBER(TO_CHAR(FNACIMIENTO,'YYYY'))) AS EDAD, COUNT(DEPARTAMENTOS.NOMBRE) FROM EMPLEADOS, DEPARTAMENTOS GROUP BY (DEPARTAMENTOS.NOMBRE) HAVING COUNT(*)>1;

Pero obviamente no me sale bien, y no sé como solucionarlo,

Os lo agradezco, muchas gracias.
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CONSULTA

Publicado por Rafael (328 intervenciones) el 27/02/2019 09:07:09
Hola, Rodic...

Un consejo:
Si pones tu codigo como codigo y lo formateas te ayudas a entender que haces y nos ayudas a ayudarte,

Te dejo un ejemplo de formateo:
1
2
3
4
5
6
7
SELECT EMPLEADOS.NOMBRE
     , (TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - TO_NUMBER(TO_CHAR(FNACIMIENTO,'YYYY'))) AS EDAD
     , COUNT(DEPARTAMENTOS.NOMBRE)
FROM   EMPLEADOS
     , DEPARTAMENTOS
GROUP  BY DEPARTAMENTOS.NOMBRE
HAVING COUNT(*)>1;

Ahora que se ve bonito se entiende mejor, con lo que te puedo decir algunos errores:

1. No estableces como se UNEN la tabla "EMPLEADOS" y la tabla DEPARTAMENTOS.
Esto es seguramente en empleados tienes una clave de departamento que tienes que igualar a la llave primaria del departamento, si no tienes esto no podras unirlo.

2. La clausula GROUP BY es 100% incorrecta.
Estas contando el Numero de Nombres de Departamento en el que ha estado CADA EMPLEADO...
Luego entonces deberia ser algo como GROUP BY EMPLEADO.NOMBRE

Pero ademas has incluido un campo de edad que no cuenta con una funcion de agregacion si no mas bien una operacion ...
Aqui las opciones son agregarla... o agruparla....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de gilman
Val: 117
Bronce
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CONSULTA

Publicado por gilman (52 intervenciones) el 27/02/2019 11:50:42
Por otra parte el campo EDAD está mal calculado, tal como lo calcula puede ser mayor a la edad real del empleado.
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
sin imagen de perfil
Val: 499
Oro
Ha mantenido su posición en Oracle (en relación al último mes)
Gráfica de Oracle

CONSULTA

Publicado por Rafael (328 intervenciones) el 27/02/2019 15:38:02
gilman... tienes toda la razon al respecto ... lo correcto seria algo como esto:
1
months_between(sysdate,FNACIMIENTO)/12  as EDAD

Saludos
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