- Este tópico contém 13 respostas, 3 vozes e foi atualizado pela última vez 15 anos, 10 meses atrás por
MARCIO_LOK.
-
AutorPosts
-
16 de maio de 2010 às 4:06 am #94022
MARCIO_LOK
ParticipanteBoa noite pessoal
Preciso mais uma vez da ajuda de vcs…
eu possuo duas tabelas…uma tem dois campos…
codigo descricao
1 Ativo
12 Caixa
123 Banco
1234 Diversos
12345 Outrosna outra tabela tenho o campo codigo e valor.
codigo e valor
123 R$ 345,77
12345 R$ 60.00Eu queria que ficasse asssim:
codigo descricao valor
1 Ativo
12 Caixa
123 Banco R$ 345,77
1234 Diversos
12345 Outros R$ 60,00Ou seja, queria concatenar as duas tabelas, as que tivessem o campo codigo
correspondente puxava o valor na frente o que nao tivesse exibiria o valor da primeira
tabela como faco isso?
ObrigadoMarcio
17 de maio de 2010 às 4:34 pm #94024marlontk
ParticipanteNeste tipo de caso voce pode utilizar (+) ao lado da junção que pode não conter os dados que indica ao banco que se ele nao encontrar o codigo correspondente na tabela b ele vai mostrar igualmente os campos da tablela a.
select a.codigo,a.descricao,b.valor
from tabela1 a, tabela2 b
where a.codigo = b.codigo(+);Atenciosamente
Marlon
17 de maio de 2010 às 4:46 pm #94026MARCIO_LOK
ParticipanteMarlon
Nao deu certo nao, a unica diferenca é que usei com Join ….
From Clanca L Join Cconta C
On L.Codcoligada = C.Codcoligada
And L.Credito = C.Codconta
Or L.Debito = C.Codconta
Join Ccontahistorico H
On H.Codcoligada = C.Codcoligada
and H.CodConta(+) = C.CodConta
Join Csdant S
On S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codcontaele da o seguinte erro:
ORA-25156: a junção externa de estilo antigo (+) não pode ser usada com junções ANSI
25156. 00000 – “old style outer join (+) cannot be used with ANSI joins”
*Cause: When a query block uses ANSI style joins, the old notation
for specifying outer joins (+) cannot be used.
*Action: Use ANSI style for specifying outer joins also.
Erro na linha: 77 Coluna: 1317 de maio de 2010 às 5:26 pm #94029marlontk
ParticipanteCara Não uso junção tipo Ansi e neste caso não sei se este recurso funciona teria que ver no documentação.
17 de maio de 2010 às 8:26 pm #94035MARCIO_LOK
ParticipanteIxi, entao ferrou, porque to usando join, pra agrupar varias tabelas…
17 de maio de 2010 às 9:17 pm #94038burga
ParticipanteUsa left outer join, você está tentando utilizar o join de duas maneiras entre as mesmas tabelas… Ou seja você está tentando o inner join com Cconta e Ccontahistorico mas na cláusula ON está indicando um left outer join (H.CodConta(+) = C.CodConta), nunca vai funcionar…
tenta desta forma:
From Clanca L Join Cconta C
On L.Codcoligada = C.Codcoligada
And L.Credito = C.Codconta
Or L.Debito = C.Codconta
left outer Join Ccontahistorico H
On H.Codcoligada = C.Codcoligada
and H.CodConta = C.CodConta
Join Csdant S
On S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codcontaou
From Clanca L Join Cconta C
On L.Codcoligada = C.Codcoligada
And L.Credito = C.Codconta
Or L.Debito = C.Codconta
Join Csdant S
On S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta,
Ccontahistorico H
where
H.Codcoligada = C.Codcoligada
and H.CodConta(+) = C.CodConta
17 de maio de 2010 às 9:49 pm #94040MARCIO_LOK
Participantenao deu certo…
no primeiro ele nao mostra…. ele continua como se nao tivesse usando o left outer join… e no segundo exemplo… apresenta esse erro aqui oh..
ORA-25156: a junção externa de estilo antigo (+) não pode ser usada com junções ANSI
25156. 00000 – “old style outer join (+) cannot be used with ANSI joins”
*Cause: When a query block uses ANSI style joins, the old notation
for specifying outer joins (+) cannot be used.
*Action: Use ANSI style for specifying outer joins also.
Erro na linha: 85 Coluna: 2417 de maio de 2010 às 9:57 pm #94041burga
ParticipanteNo segundo seria o seguinte:
From Clanca,Cconta C,Csdant S,
Ccontahistorico H
where
H.Codcoligada = C.Codcoligada
and H.CodConta(+) = C.CodConta
and L.Codcoligada = C.Codcoligada
and (L.Credito = C.Codconta
Or L.Debito = C.Codconta)
and S.Codcoligada = C.Codcoligada
and S.Codconta = C.Codcontaoutra coisa que eu mudei foi L.Codcoligada = C.Codcoligada And L.Credito = C.Codconta Or L.Debito = C.Codconta
colocando o OR entre (). Se eu estiver errado na lógica você tira os () do OR.
17 de maio de 2010 às 10:07 pm #94043MARCIO_LOK
Participanteainda da dando erro, olha só como ficou:
From Clanca,Cconta C,Csdant S,
Ccontahistorico H
Where
H.Codcoligada = C.Codcoligada
And H.Codconta(+) = C.Codconta
And L.Codcoligada = C.Codcoligada
And (L.Credito = C.Codconta
Or L.Debito = C.Codconta)
And S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta
And Substr(C.Codconta,1,1) = ‘1’
And To_Char(L.Data,’yy’) = ’09’
GROUP BY H.Descricao, H.CodContata certo? Esse codigo da erro…
ORA-00904: “L”.”DEBITO”: identificador inválido
00904. 00000 – “%s: invalid identifier”
*Cause:
*Action:17 de maio de 2010 às 10:12 pm #94044MARCIO_LOK
ParticipanteAmigao….. esse problema ja achei, é que a tabela clanca ta sem um apelido… colquei a letra L e rodou… só que nao puxa os codigos que nao tem associacao nao….
só tras os que tem mesmo….
😥17 de maio de 2010 às 10:41 pm #94045burga
ParticipanteVocê diz os codigos que nao tem associação na tabela de historico certo?
Se existir o codigo na tabela corrente e na tabela de historico e ainda assim ele não tiver retornando, vc pode dar uma revisada nos outros joins porque são eles que estão filtrando… Da uma revisada neles que vc encontra quem está filtrando…
17 de maio de 2010 às 10:49 pm #94046MARCIO_LOK
ParticipanteRevisei, e os joins estao ligados corretamentes… nao sei porqie ele nao me tras os codigos da tabela historico (historicos) q nao tem nada com a tabela lancamentos (clanca), as ligacoes estao corretas…. tras tudo certinho… mais o que eu quero, ou seja, todos os codigos da tabela historico…
18 de maio de 2010 às 5:21 pm #94058burga
ParticipanteVamos analisar tudo o que você falou e mais o seu código:
From Clanca L,Cconta C,Csdant S,
Ccontahistorico H
Where
H.Codcoligada = C.Codcoligada
And H.Codconta(+) = C.Codconta
And L.Codcoligada = C.Codcoligada
And (L.Credito = C.Codconta
Or L.Debito = C.Codconta)
And S.Codcoligada = C.Codcoligada
And S.Codconta = C.Codconta
And Substr(C.Codconta,1,1) = '1'
And To_Char(L.Data,'yy') = '09'
GROUP BY H.Descricao, H.CodContaSegue os passos do que está acontecendo na sua consulta, veja se está correto a lógica da sua consulta:
- Você faz um INNER JOIN entre as tabelas Clanca e Cconta onde:
– 1.1. Clanca.Credito ou Clanca.Debito é igual a Cconta.Codconta.
– 1.2. Além de Clanca.Credito ou Clanca.Debito ser igual a Cconta.Codconta também Clanca.Codcoligada deve ser igual a Cconta.Codcoligada.
– 1.3. Além de tudo, a consulta só retornará os resultados onde o primeiro caractere de Cconta.Codconta é igual a ‘1’ E o ano de Clanca.Data deve ter final 09.- Você faz um INNER JOIN do resultado do processamento anterior com a tabela Csdant, onde:
– 2.1. Csdant.Codcoligada é igual a Cconta.Codcoligada E Csdant.Codconta é igual a Cconta.Codconta.
Considerando que você utilizou a seguinte cláusula:
GROUP BY H.Descricao, H.CodContaO que significa que sua cláusula Select retorna somente os campos H.Descricao e H.CodConta então temos:
SE depois de todos os filtros dos processamentos 1 e 2 a consulta retornar somente códigos Cconta.Codconta que não possuam correspondentes na tabela de histórico, então não deve aparecer nada em seu resultado.
Caso contrário, o left outer join fará diferença no resultado, seguindo o processamento 3:
- left outer join do resultado do processamento 2 com a tabela Ccontahistorico, onde:
– 3.1. Se existir Ccontahistorico.Codconta igual a Cconta.Codconta, fazer o join e trazer os resultados, senão trazer somente os resultados do processamento 2 e campos nulos em Ccontahistorico.
O que podemos concluir disso tudo é que, se os joins não estão filtrando os resultados que você quer, então as condições Substr(C.Codconta,1,1) = ‘1’ e To_Char(L.Data,’yy’) = ’09’ estão fazendo este papel. Se as condições também não estão fazendo isto, então é problema na lógica da sua consulta e você terá que defini-la melhor e reescrevê-la OU ainda pode ser problema nos seus dados.
Verifique os processamentos 1, 2 e 3 que eu postei aqui e veja se a sua consulta está realmente correta, atentando aos INNER JOINS pois quando não existir correspondente em uma das três tabelas envolvidas nos INNER JOINS o registro será excuído do resultado. Testando a consulta por partes facilita encontrar onde está o problema.
19 de maio de 2010 às 3:07 pm #94075MARCIO_LOK
ParticipanteAmigao Valeu, nao consegui mesmo, infelizmente me falta competencia pra achar esse problema. acho que vou transformar em duas views e linkar ambas….. infelizmente nao consegui mesmo, analisei e nada… brigadao pela forca… abracos
-
AutorPosts
- Você deve fazer login para responder a este tópico.