Tenho duas tabelas: A e B.
A tabela A possui a movimentação da ficha financeira de cada funcionário mês a mês. A tabela B possui o histórico de seção de cada funcionário.
Tabela A: CHAPA, ANOCOMP, MESCOMP,DTPAGTO,VALOR.
Tabela B: CHAPA,DTMUDANCA,MOTIVO,CODSECAO.
Digamos que um fucnionário em janeiro de 2006 estava na seção 2 e em maio ele foi para seção 5. Ao cruzar estes dados com sua ficha financeira de 2006: A.CHAPA, A.ANOCOMP, A.MESCOMP, B.CODSECAO, A.VALOR,
preciso que ele me mostre de janeir à abril a seção 2 e de maio a setembro a seção 5.
Como faço esse SELECT
-
- Rank: Analista Júnior
- Mensagens: 73
- Registrado em: Qui, 21 Set 2006 10:13 am
- Localização: sp
- TBou
- Rank: Analista Sênior
- Mensagens: 136
- Registrado em: Qui, 05 Ago 2004 9:33 am
- Localização: Campo Grande - MS
bom neste caso você teria que fazer uma select interna para trazer a secao
e não colocaria a tabela B no from, veja
detalhe neste caso trará o maior codigo de secao antes da data alteração.
e não colocaria a tabela B no from, veja
select A.CHAPA,
A.ANOCOMP,
A.MESCOMP,
(SELECT MAX(NR_SECAO) FROM B
WHERE A.CHAPA = B.CHAPA
AND TO_DATE('01'||A.MESCOMP||A.ANOCOMP,'DDMMRRRR') < TRUNC(B.DTPAGTO)) CODSECAO,
A.VALOR
FROM A
- TBou
- Rank: Analista Sênior
- Mensagens: 136
- Registrado em: Qui, 05 Ago 2004 9:33 am
- Localização: Campo Grande - MS
tabela A
Tabela B
fazendo a select
eu acho que é desta forma que você precisa certo?
CHAPA ANOC ME DTPAGTO VALOR
---------- ---- -- -------------------- ----------
12 2006 01 28/09/2006 100
12 2006 02 28/09/2006 100
12 2006 03 28/09/2006 100
12 2006 04 28/09/2006 100
12 2006 05 28/09/2006 100
12 2006 06 28/09/2006 100
12 2006 07 28/09/2006 100
12 2006 08 28/09/2006 100
12 2006 09 28/09/2006 100
12 2006 10 28/09/2006 100
12 2006 11 28/09/2006 100
12 2006 12 28/09/2006 100
CHAPA DTMUDANCA MOTIVO CODSECAO
---------- -------------------- ------------- ----------
12 01/05/2006 TESTE 5
12 01/08/2006 TESTE 8
12 01/12/2005 TESTE 2
SQLWKS> select A.CHAPA,
2> A.ANOCOMP,
3> A.MESCOMP,
4> (SELECT MAX(CODSECAO) FROM B
5> WHERE A.CHAPA = B.CHAPA
6> AND TO_DATE('01'||A.MESCOMP||A.ANOCOMP,'DDMMRRRR') >= TRUNC(B.DTMUDANCA)) CODSECAO,
7> A.VALOR
8> FROM A
9>
CHAPA ANOC ME CODSECAO VALOR
---------- ---- -- ---------- ----------
12 2006 01 2 100
12 2006 02 2 100
12 2006 03 2 100
12 2006 04 2 100
12 2006 05 5 100
12 2006 06 5 100
12 2006 07 5 100
12 2006 08 8 100
12 2006 09 8 100
12 2006 10 8 100
12 2006 11 8 100
12 2006 12 8 100
12 linhas selecionadas.
-
- Rank: Analista Júnior
- Mensagens: 73
- Registrado em: Qui, 21 Set 2006 10:13 am
- Localização: sp
Oi Thiago, beleza?
Só falta um pequeno detalhe para que a sql funcione. Quando a mundança de seção acontece em ordem numérica, ela funciona direitinho. Se alternar a ordem numérica da seção: 01/12/2005, 2; 01/05/2006, 8; 01/09/2006, 3; na ora de exibir os dados, a seção 3 não será exibida. Seção 2 até 07/2006 e seção 8 de 05/2006 em diante. Obrigado pela atenção.
Só falta um pequeno detalhe para que a sql funcione. Quando a mundança de seção acontece em ordem numérica, ela funciona direitinho. Se alternar a ordem numérica da seção: 01/12/2005, 2; 01/05/2006, 8; 01/09/2006, 3; na ora de exibir os dados, a seção 3 não será exibida. Seção 2 até 07/2006 e seção 8 de 05/2006 em diante. Obrigado pela atenção.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 8 visitantes