- Este tópico contém 7 respostas, 4 vozes e foi atualizado pela última vez 16 anos atrás por
VINI85.
-
AutorPosts
-
2 de março de 2010 às 9:10 pm #92902
VINI85
ParticipanteTenho 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”.2 de março de 2010 às 9:34 pm #92903burga
ParticipanteCada funcionário só pode ter um proveto e um desconto ou pode ter vários proventos e descontos pro mesmo funcionário?
2 de março de 2010 às 9:50 pm #92904VINI85
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.
2 de março de 2010 às 10:04 pm #92906burga
ParticipanteE 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??
2 de março de 2010 às 10:14 pm #92907VINI85
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 NULL2 de março de 2010 às 10:26 pm #92908fsitja
ParticipantePode 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).
3 de março de 2010 às 4:43 pm #92923ithigvo
ParticipanteBom 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.codfuncand 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.
3 de março de 2010 às 9:52 pm #92945VINI85
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.codfuncand 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.VALORFROM PFUNC A
JOIN PFPERFF B
ON A.CODCOLIGADA = B.CODCOLIGADA
AND A.CHAPA = B.CHAPAJOIN 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.CODIGOWHERE 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===============
UNIONSELECT
NULL
,NULL
,C.CODEVENTO
,D.DESCRICAO
,C.VALORFROM PFUNC A
JOIN PFPERFF B
ON A.CODCOLIGADA = B.CODCOLIGADA
AND A.CHAPA = B.CHAPAJOIN 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.CODIGOWHERE 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=============== -
AutorPosts
- Você deve fazer login para responder a este tópico.