Ir para conteúdo
Fórum Script Brasil

mantovanilh

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por mantovanilh

  1. 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:

    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.

     

    Poderiam me ajudar?

       
         
         
         
         
    •  
×
×
  • Criar Novo...