Pular para o conteúdo
  • Este tópico contém 7 respostas, 4 vozes e foi atualizado pela última vez 16 anos atrás por VINI85.
Visualizando 8 posts - 1 até 8 (de 8 do total)
  • Autor
    Posts
  • #92902
    VINI85
    Participante

      Tenho uma tabela de ficha financeira do funcionário, onde são gravados todos os proventos e os descontos da folha desse funcionário. Preciso montar uma sentença que me retorne os proventos e descontos na mesma linha.
      Dados da Tabela.
      Nome: TFINANC
      Campos: Codfunc
      Codevento
      Descricao
      Valor
      ProvDesc (esse campo quando for provento fica marcado com “P” e desconto como “D”.

      #92903
      burga
      Participante

        Cada funcionário só pode ter um proveto e um desconto ou pode ter vários proventos e descontos pro mesmo funcionário?

        #92904
        VINI85
        Participante

          [quote=”burga”:3kong96t]Cada funcionário só pode ter um proveto e um desconto ou pode ter vários proventos e descontos pro mesmo funcionário?[/quote]

          Varios, exemplo o funcionário A pode ter este mes 3 proventos e 2 descontos, o Func B 5 proventos e 3 descontos.

          #92906
          burga
          Participante

            E você quer tudo na mesma linha?

            Se for isto, o único jeito que conheço pra fazer é com SQL dinâmico (NDS ou DBMS_SQL).

            http://www.google.com.br/search?hl=pt-BR&client=firefox-a&hs=ger&rls=org.mozilla%3Apt-BR%3Aofficial&q=%22native+dynamic+sql%22+dbms_sql+oracle&btnG=Pesquisar&meta=&aq=f&oq=

            Alguém mais aí tem uma idéia melhor??

            #92907
            VINI85
            Participante

              [quote=”burga”:24e6we6v]E você quer tudo na mesma linha?

              Se for isto, o único jeito que conheço pra fazer é com SQL dinâmico (NDS ou DBMS_SQL).

              http://www.google.com.br/search?hl=pt-BR&client=firefox-a&hs=ger&rls=org.mozilla%3Apt-BR%3Aofficial&q=%22native+dynamic+sql%22+dbms_sql+oracle&btnG=Pesquisar&meta=&aq=f&oq=

              Alguém mais aí tem uma idéia melhor??[/quote]

              Vou dar um exemplo.

              Nome Salário Hora Extra INSS IRRF
              José da Silva 500,00 100,00 66,00 10,00
              Ana da Silva 500,00 NULL 55,00 10,00
              João de Souza 1000,00 120,00 120,00 NULL

              #92908
              fsitja
              Participante

                Pode fazer usando técnicas de pivot, mas a solução vai depender de sua versão do Oracle. Qual seria?

                Além disso, para mostrar como, ajudaria muito se você pudesse postar sua estrutura de tabelas envolvidas na query (create table simples) e exemplo de dados para essa(s) tabela(s) (inserts de dados exemplo).

                #92923
                ithigvo
                Participante

                  Bom dia Vini,

                  não sei se consegui entender ao certo o que precisa, mas veja se seria mais ou menos isto:

                  select
                  func.codfunc,
                  sum(prov.valor) as proventos,
                  sum(des.valor) as descontos
                  from
                  tfinanc func, --pode ser trocado pela sua tabela de usuários
                  tfinanc prov,
                  tfinanc des
                  where func.codfunc = prov.codfunc
                  and func.codfunc = des.codfunc

                  and prov.provdesc = 'P'
                  and des.provdesc = 'D'

                  group by func.codfunc

                  Obs.: onde está “tfinanc func” vc pode colocar a tabela de usuários, dai coloca o nome dele ao invés do código.

                  #92945
                  VINI85
                  Participante

                    [quote=”ithigvo”:3gt7p4be]Bom dia Vini,

                    não sei se consegui entender ao certo o que precisa, mas veja se seria mais ou menos isto:

                    select
                    func.codfunc,
                    sum(prov.valor) as proventos,
                    sum(des.valor) as descontos
                    from
                    tfinanc func, --pode ser trocado pela sua tabela de usuários
                    tfinanc prov,
                    tfinanc des
                    where func.codfunc = prov.codfunc
                    and func.codfunc = des.codfunc

                    and prov.provdesc = 'P'
                    and des.provdesc = 'D'

                    group by func.codfunc

                    Obs.: onde está “tfinanc func” vc pode colocar a tabela de usuários, dai coloca o nome dele ao invés do código.[/quote]

                    ESSE É O MEU SELECT, OS DESCONTOS ESTÃO SAINDO NA MESMA COLUNA DE PROVENTOS E PRECISO QUE SAIAM AO LADO..

                    SELECT
                    A.CHAPA
                    ,A.NOME
                    ,C.CODEVENTO
                    ,D.DESCRICAO
                    ,C.VALOR

                    FROM PFUNC A
                    JOIN PFPERFF B
                    ON A.CODCOLIGADA = B.CODCOLIGADA
                    AND A.CHAPA = B.CHAPA

                        JOIN PFFINANC C
                        ON A.CODCOLIGADA = C.CODCOLIGADA
                        AND A.CHAPA = C.CHAPA
                        AND B.NROPERIODO = C.NROPERIODO
                        AND B.MESCOMP = C.MESCOMP
                        AND B.ANOCOMP = C.ANOCOMP
                    
                            JOIN PEVENTO D
                            ON C.CODCOLIGADA = D.CODCOLIGADA
                            AND C.CODEVENTO = D.CODIGO
                    

                    WHERE A.CODCOLIGADA = ‘1455’
                    AND A.CODSITUACAO ‘D’
                    AND B.NROPERIODO = ‘2’
                    AND B.MESCOMP = ’02’
                    AND B.ANOCOMP = ‘2010’
                    AND D.PROVDESCBASE = ‘P’
                    ===========BLOCO DOS PROVENTOS===============
                    UNION

                    SELECT
                    NULL
                    ,NULL
                    ,C.CODEVENTO
                    ,D.DESCRICAO
                    ,C.VALOR

                    FROM PFUNC A
                    JOIN PFPERFF B
                    ON A.CODCOLIGADA = B.CODCOLIGADA
                    AND A.CHAPA = B.CHAPA

                        JOIN PFFINANC C
                        ON A.CODCOLIGADA = C.CODCOLIGADA
                        AND A.CHAPA = C.CHAPA
                        AND B.NROPERIODO = C.NROPERIODO
                        AND B.MESCOMP = C.MESCOMP
                        AND B.ANOCOMP = C.ANOCOMP
                    
                            JOIN PEVENTO D
                            ON C.CODCOLIGADA = D.CODCOLIGADA
                            AND C.CODEVENTO = D.CODIGO
                    

                    WHERE A.CODCOLIGADA = ‘1455’
                    AND A.CODSITUACAO ‘D’
                    AND B.NROPERIODO = ‘2’
                    AND B.MESCOMP = ’02’
                    AND B.ANOCOMP = ‘2010’
                    AND D.PROVDESCBASE = ‘D’
                    ===========BLOCO DOS DESCONTOS===============

                  Visualizando 8 posts - 1 até 8 (de 8 do total)
                  • Você deve fazer login para responder a este tópico.