EMPREGADOS
UNIDADE_OPERACIONAL.
Na tabela EMPREGADOS, eu preciso pegar o FUNCIONÁRIO e seu GESTOR. Acontece que apenas na tabela EMPREGADOS eu não consigo. Logo a tabela empregados eu tenho o campo CHAPA, que é uma espécie de ID do empregado. Nessa tabela ainda, tenho um campo chamado FKND_UO que é o campo equivalente na tabela UNIDADE_OPERACIONAL. Nessa tabela sim, tenho o FUNCIONÁRIO e o seu GESTOR. Nela tem o campo PKSF_UO(PK) e tem o campo FKND_SUPERIOR_HIER. Esse campo determina o GESTOR da UO, que pode ser pego na tabela EMPREGADOS pelo campo FKND_UO . Só que no meu join não consigo pegar o cara. Essa é a query completa
SELECT
COMP2.PKSF_COMP_ORGAN AS COD_UO,
COMP2.ATSF_CO_PORT_EXT AS DESC_UO,
COMP2.FKSF_SUPERIOR_HIER AS COD_SUP,
CASE
WHEN COMP2.FKSF_FUNCAO_NIVEL = EMP.FKSF_FUNCAO THEN 1
END
AS SUPERIOR,
QUAL.PKSF_FUNCAO_NIVEL AS COD_CARGO,
QUAL.ATND_FUNCAO_SAP AS COD_CARGO_SAP,
NVL(QUAL.ATSF_FUN_PORT_EXT, 'NÃO CADASTRADO') AS DESC_CARGO,
EMP.PKSF_CHAPA AS COD_FUNC,
EMP.ATSF_NOME AS DESC_FUNC,
GE.ATSF_NOME AS GESTOR,
NVL(E.ATSF_GRAU, EMP.FKSF_GRAU) AS GRAU_FUNC,
EMP.ATND_SALAR1 AS SAL_ATUAL,
COMP2.NIVEL
FROM
(
SELECT PKSF_CHAPA, ATSF_NOME, FKSF_FUNCAO, FKND_COMP_ORGAN, ATDT_DEMISSAO, ATND_SALAR1, FKSF_GRAU
FROM PANA101V_EMPREGADO
WHERE PKSF_CHAPA NOT IN( SELECT PKND_NUMERO_PESSOAL
FROM TAKB132T_EMPREGADO_AFASTAMENTO
WHERE FKND_MOTIVO IN(6, 7) AND SYSDATE BETWEEN ATDT_DE AND ATDT_ATE)
UNION ALL
(SELECT '999', 'POSIÇÃO NÃO OCUPADA', '999',COMP2.PKSF_COMP_ORGAN, NULL, NULL, NULL
FROM
DUAL, ( SELECT COMP.PKSF_COMP_ORGAN,
COMP.ATSF_CO_PORT_EXT,
CASE
WHEN COMP.PKSF_COMP_ORGAN <> 20061607 THEN NVL(TRIM(COMP.FKSF_FUNCAO_NIVEL), 999)
END AS FKSF_FUNCAO_NIVEL,
COMP.FKSF_SUPERIOR_HIER,
LEVEL AS NIVEL,
COMP.ATSF_DT_CANCEL_CO
FROM PANA004T_COMPONENT COMP
--WHERE COMP.ATSF_DT_CANCEL_CO = 0
CONNECT BY PRIOR COMP.PKSF_COMP_ORGAN = COMP.FKSF_SUPERIOR_HIER
START WITH COMP.PKSF_COMP_ORGAN = NVL(20047213 ,20061607)) COMP2
WHERE COMP2.FKSF_FUNCAO_NIVEL = '999'
AND COMP2.ATSF_DT_CANCEL_CO = 0)
) EMP
LEFT JOIN(SELECT EMP.ATSF_NOME, EMP.PKSF_CHAPA FROM PANA101V_EMPREGADO EMP
LEFT JOIN PANA004T_COMPONENT C ON EMP.FKND_COMP_ORGAN = C.FKSF_SUPERIOR_HIER)GE ON EMP.PKSF_CHAPA = GE.PKSF_CHAPA
LEFT JOIN TAKB100T_EMPREGADO E ON E.PKND_NUMERO_PESSOAL = EMP.PKSF_CHAPA
LEFT JOIN
PANA001T_QUALIFICA QUAL
ON EMP.FKSF_FUNCAO = QUAL.PKSF_FUNCAO_NIVEL
RIGHT JOIN
( SELECT COMP.PKSF_COMP_ORGAN,
COMP.ATSF_CO_PORT_EXT,
CASE
WHEN COMP.PKSF_COMP_ORGAN <> 20061607 THEN NVL(TRIM(COMP.FKSF_FUNCAO_NIVEL), 999)
END AS FKSF_FUNCAO_NIVEL,
COMP.FKSF_SUPERIOR_HIER,
LEVEL AS NIVEL,
COMP.ATSF_DT_CANCEL_CO
FROM PANA004T_COMPONENT COMP
WHERE COMP.ATSF_DT_CANCEL_CO = 0
CONNECT BY PRIOR COMP.PKSF_COMP_ORGAN = COMP.FKSF_SUPERIOR_HIER
START WITH COMP.PKSF_COMP_ORGAN = NVL(20047213 ,20061607)) COMP2
ON COMP2.PKSF_COMP_ORGAN = EMP.FKND_COMP_ORGAN
LEFT JOIN(SELECT EMP.ATSF_NOME, EMP.PKSF_CHAPA, EMP.FKND_COMP_ORGAN FROM PANA101V_EMPREGADO EMP
WHERE EMP.FKND_COMP_ORGAN IN(SELECT DISTINCT C.FKSF_SUPERIOR_HIER FROM PANA004T_COMPONENT C))GE
ON EMP.PKSF_CHAPA = GE.PKSF_CHAPA AND GE.FKND_COMP_ORGAN = COMP2.PKSF_COMP_ORGAN
WHERE ( QUAL.PKSF_FUNCAO_NIVEL NOT IN ( 'MU2', '8WY') OR QUAL.PKSF_FUNCAO_NIVEL IS NULL )
AND COMP2.ATSF_DT_CANCEL_CO = 0
ORDER BY COMP2.NIVEL, COMP2.ATSF_CO_PORT_EXT, SUPERIOR;
LEFT JOIN(SELECT EMP.ATSF_NOME, EMP.PKSF_CHAPA FROM PANA101V_EMPREGADO EMP
LEFT JOIN PANA004T_COMPONENT C ON EMP.FKND_COMP_ORGAN = C.FKSF_SUPERIOR_HIER)GE ON EMP.PKSF_CHAPA = GE.PKSF_CHAPA