Estou montando uma planilha que traga todas as Seções que aparecem na tabela PFHSTSEC (Histórico de Seção) porém que também traga quais foram as funções (PFHSTFCO que estiveram em cada seção pelo período de data de cada tabela.
Consegui montar um select que traga isto, porém quando tem intersecção como no Exemplo abaixo.
18/07/2005 117 AUX DE EXPEDICAO
01/10/2005 118 AUX DE ALMOXARIFADO
01/05/2007 132 AUX DE SUPORTE
01/07/2008 179 ANALISTA DE SUPORTE
01/12/2012 202 ANALISTA DE SUPORTE PL
01/03/2015 311 ANALISTA INFRAESTRUTURA PL
01/01/2017 362 ANALISTA INFRAESTRUTURA SR
O resultado que necessito é conforme abaixo:
SEÇÃO
PERÍODO
FUNÇÃO
Logística
18/07/2005 à 31/05/2006
117 e 118
Estoque
01/06/2006 a 30/04/2007
118
CPD
01/05/2007 à 08/09/2011
132 e 179
Informática
09/09/2011 até hoje
179, 202, 311, 262
Com isto montei o script abaixo
SELECT DISTINCT X.*
FROM (
SELECT A.CODSECAO
, PSECAO.DESCRICAO
, (SELECT X.CODFUNCAO
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA)
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA <= A.DTMUDANCA)
) CODFUNCAO
, (SELECT X1.NOME
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA)
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA<=A.DTMUDANCA)) FUNCAO
FROM PFHSTSEC A LEFT JOIN PFUNC B ON
A.CODCOLIGADA = B.CODCOLIGADA
AND A.CHAPA = B.CHAPA
JOIN PSECAO ON
A.CODCOLIGADA = PSECAO.CODCOLIGADA
AND A.CODSECAO = PSECAO.CODIGO
WHERE A.CODCOLIGADA = 1
AND A.CHAPA = '3109'
) X
WHERE CODSECAO IS NOT NULL
AND CODFUNCAO IS NOT NULL
ORDER BY 1, 3
Mas o resultado que o meu script retorna é o seguinte:
SEÇÃO
PERÍODO
FUNÇÃO
Logística
18/07/2005 A 30/09/2005
117
Estoque
01/10/2005 A 30/04/2007
118
CPD
01/05/2007 A 30/06/2008
132
Informática
01/07/2008 A 30/11/2012
179
Resumindo não esta trazendo todos os códigos de funções que deveriam e no último registro retorna apenas 1 item e não 4 que seria o correto.
Pergunta
mantovanilh
Estou montando uma planilha que traga todas as Seções que aparecem na tabela PFHSTSEC (Histórico de Seção) porém que também traga quais foram as funções (PFHSTFCO que estiveram em cada seção pelo período de data de cada tabela.
Consegui montar um select que traga isto, porém quando tem intersecção como no Exemplo abaixo.
Histórico de Seção
18/07/2005 01.01.08.03.01 LOGISTICA
01/06/2006 01.01.08.05.01 EST PROD ACAB.
01/05/2007 01.03.01.06.01 CPD
09/09/2011 01.03.01.03.01 INFORMÁTICA
Histórico de Função
18/07/2005 117 AUX DE EXPEDICAO
01/10/2005 118 AUX DE ALMOXARIFADO
01/05/2007 132 AUX DE SUPORTE
01/07/2008 179 ANALISTA DE SUPORTE
01/12/2012 202 ANALISTA DE SUPORTE PL
01/03/2015 311 ANALISTA INFRAESTRUTURA PL
01/01/2017 362 ANALISTA INFRAESTRUTURA SR
O resultado que necessito é conforme abaixo:
Com isto montei o script abaixo
SELECT DISTINCT X.*
FROM (
SELECT A.CODSECAO
, PSECAO.DESCRICAO
, (SELECT X.CODFUNCAO
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA)
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA <= A.DTMUDANCA)
) CODFUNCAO
, (SELECT X1.NOME
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA = (SELECT MAX(X.DTMUDANCA)
FROM PFHSTFCO X LEFT JOIN PFUNCAO X1 ON
X.CODCOLIGADA=X1.CODCOLIGADA
AND X.CODFUNCAO=X1.CODIGO
WHERE X.CODCOLIGADA=A.CODCOLIGADA
AND X.CHAPA=A.CHAPA
AND X.DTMUDANCA<=A.DTMUDANCA)) FUNCAO
FROM PFHSTSEC A LEFT JOIN PFUNC B ON
A.CODCOLIGADA = B.CODCOLIGADA
AND A.CHAPA = B.CHAPA
JOIN PSECAO ON
A.CODCOLIGADA = PSECAO.CODCOLIGADA
AND A.CODSECAO = PSECAO.CODIGO
WHERE A.CODCOLIGADA = 1
AND A.CHAPA = '3109'
) X
WHERE CODSECAO IS NOT NULL
AND CODFUNCAO IS NOT NULL
ORDER BY 1, 3
Mas o resultado que o meu script retorna é o seguinte:
Resumindo não esta trazendo todos os códigos de funções que deveriam e no último registro retorna apenas 1 item e não 4 que seria o correto.
Poderiam me ajudar?
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.