Como faço esse SELECT

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 21 Set 2006 10:48 am

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.
fbarros300472
Localização: sp

Mensagemem Sex, 22 Set 2006 12:51 pm

bom neste caso você teria que fazer uma select interna para trazer a secao
e não colocaria a tabela B no from, veja

Código: Selecionar todos
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



detalhe neste caso trará o maior codigo de secao antes da data alteração.
TBou
Localização: Campo Grande - MS

Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Mensagemem Sex, 22 Set 2006 12:54 pm

opas...foi mal...na verdade coloquei o sinal invertido...o correto é maior
Código: Selecionar todos
TO_DATE('01'||A.MESCOMP||A.ANOCOMP,'DDMMRRRR') > TRUNC(B.DTPAGTO)
TBou
Localização: Campo Grande - MS

Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Mensagemem Qui, 28 Set 2006 3:13 pm

tabela A
Código: Selecionar todos
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

Tabela B
Código: Selecionar todos
CHAPA      DTMUDANCA            MOTIVO        CODSECAO 
---------- -------------------- ------------- ----------
        12 01/05/2006           TESTE            5
        12 01/08/2006           TESTE            8
        12 01/12/2005           TESTE            2


fazendo a select
Código: Selecionar todos
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.


eu acho que é desta forma que você precisa certo?
TBou
Localização: Campo Grande - MS

Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Mensagemem Sex, 29 Set 2006 1:15 pm

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.
fbarros300472
Localização: sp



Voltar para SQL

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes