- Este tópico contém 5 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 11 meses atrás por
tidinas.
-
AutorPosts
-
14 de abril de 2010 às 2:59 am #93643
tidinas
ParticipanteOlá pessoal!
Este é meu primeiro post aqui e sou novo no mundo dos banco de dados. Estou fazendo alguns exercícios e empaquei neste aqui:
“Criei um relatório que exiba o nome, o local de trabalho e o número de funcionários de cada departamento. Certifique-se de que o relatório também inclua departamentos sem funcionários.”
abaixo segue a estrutura das 3 tabelas envolvidas:
SQL> desc employees
Nome Nulo? Tipo
—————————————– ——– ————-
EMPLOYEE_ID NOT NULL NUMBER(6)
LAST_NAME NOT NULL VARCHAR2(25)
JOB_ID NOT NULL VARCHAR2(10)
DEPARTMENT_ID NUMBER(4)SQL> DESC LOCATIONS
Nome Nulo? Tipo
—————————————– ——– ————-
LOCATION_ID NOT NULL NUMBER(4)
STREET_ADDRESS VARCHAR2(40)
COUNTRY_ID CHAR(2)SQL> DESC DEPARTMENTS;
Nome Nulo? Tipo
—————————————– ——– ————-
DEPARTMENT_ID NOT NULL NUMBER(4)
DEPARTMENT_NAME NOT NULL VARCHAR2(30)
LOCATION_ID NUMBER(4)Pelo que entendi, o exercício pede para que eu exiba o LAST_NAME da tabela EMPLOYEES, o STREET_ID do departamento do funcionário e a quantidade de funcionários por departamentos. Pois bem, olhem o que fiz:
SELECT DEPARTMENT_ID, COUNT(LAST_NAME) FROM EMPLOYEES
WHERE DEPARTMENT_ID IS NOT NULL
GROUP BY DEPARTMENT_IDDEPARTMENT_ID COUNT(LAST_NAME)
————- —————-
10 1
20 2
30 6
40 1
50 45Consegui fazer a contagem de funcionários por departamento, mas quanto ao nome do funcionário e o endereço, como incluo eles na consulta?
grato!
14 de abril de 2010 às 3:13 pm #93646marlontk
ParticipanteOpa.
Pelo que entendi o relatório deve conter o nome do departamento,localização e quantidade de funcionários, sendo que é para listar departamentos com 0 funcionarios.
Para este problema o sql seria.select departament_name, street_address,nvl(count(e.employee_id),0)
from departaments d,locations l,employees e
where d.departament_id = e.departament_id(+)
and d.location_id = l.location_id
group by departament_name, street_addressSe tiver alguma duvida sobre alguma coisa no comando escreva.
At+14 de abril de 2010 às 3:17 pm #93647Leonardo Litz
ParticipanteTente assim:
SELECT E.LAST_NAME,
D.LOCATION_ID,
D.DEPARTMENT_ID,
(SELECT COUNT(*)
FROM EMPLOYEES E2
WHERE E2.DEPARTMENT_ID = E.DEPARTMENT_ID ) QTD_FUNC
FROM EMPLOYEES E,
DEPARTMENTS D
WHERE E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY E.LAST_NAME,
D.LOCATION_ID,
D.DEPARTMENT_ID
Vlw Leonardo Litz
14 de abril de 2010 às 3:58 pm #93648Peterson
ParticipanteSe quiser flautear seu relatório mais, inclua cabeçalho e rodapé nele adcionando essas linhas ao começo do script.
TTITLE LFT ‘Data de Execução: ‘ _DATE CENTER ” RIGHT ‘Page: ‘ FORMAT 999 SQL.PNO SKIP2
BTITLE CENTER ” RIGHT ‘Page: ‘ FORMAT 999 SQL.PNO
SET ECHO OFF
SET VERIFY OFF14 de abril de 2010 às 3:59 pm #93649Peterson
ParticipantePerdão, houve um erro de digitação. Onde está LFT entenda LEFT
18 de abril de 2010 às 4:41 am #93695tidinas
ParticipanteEra isso que queria mesmo!!!! rss Obrigado senhores!
-
AutorPosts
- Você deve fazer login para responder a este tópico.