Busca e Resultado Iguais

23/11/2017

0

SQL

Bom dia, sou iniciante em programação e estou com um problema que não consigo resolver. Tenho duas tabelas, NF e PlanoContas, onde na tabela NF tem o código de duas contas contábeis, a de débito e credito que estão na tabela PlanoContas.
Preciso trazer em uma linha a nota fiscal emitida com as respectivas contas debito e credito. Mas o problema está ai, quando busco os códigos das duas contas que já estão na tabela NF, preciso trazer a descrição ( nome ) das contas que estão na tabela PlanoContas. Ao fazer isso, o nome da primeira conta se repete na segunda conta.
Fiz o left join unindo os PKs normal, mas não consigo evitar que isto aconteça.

Data Movimento NumDocumento CodConta Descricao CodContrapartida Descricao
22/06/2017 228717 10118 ( - ) DEVOLUCOES DE VENDAS 1010 ( - ) DEVOLUCOES DE VENDAS


Como podem ver a conta 10118 é sim devoluções de vendas mas a conta 1010 não.

Será que podem me ajudar nesta questão?
Alexandre Daniel

Alexandre Daniel

Responder

Post mais votado

23/11/2017

Se entendi bem cada código 10118 1010 estão armazenadas em linhas diferentes, quando você faz o Select ele gera um cursor com todos os registro em linhas, para poder pegar no mesmo Select ou seja na mesma linha você vai ter que fazer um Sub Select usando o CodContrapartida acredito que isto resolve seu problema.

Um exemplo:
Select nf.DataMovimento, nf.NumDocumento,lc.CodConta,pc.Descricao,lc.CodContrapartida, (Select Descricao from PlanoContas where ID = CodContrapartida) as Descricao2 from NotasFiscais ... e segue os demais normalmente.

Neste exemplo o segundo campo Descricao vira um Select que ira trazer o resultado do campo Descricao vinculada a Chave da tabela PlanoContas.

Ilustracão:
PlanoContas
----------------------------
ID Descricao Outros
1 Teste bla
2 Teste2 bla2

Obs.: Este sub Select não pode trazer mais de uma linha de resultados. mas pode se usar Group para unir vários resultados

Acho que se seguir por esta linha de raciocínio pode lhe ajudar

Winston Jesus

Winston Jesus
Responder

Mais Posts

23/11/2017

Winston Jesus

Boa tarde Alexandre,
Posta a linha do "Select" assim fica mais fácil de analisar e poder te ajudar.
Abraço!
Responder

23/11/2017

Alexandre Daniel

Boa Tarde Winston

Segue o Script :

Select nf.DataMovimento, nf.NumDocumento, CodConta, Descricao, CodContrapartida, Descricao from NotasFiscais nf
left join LancamentosContabeis lc on lc.Empresa = nf.Empresa
and lc.NumLancamento = nf.NumLancamento
and lc.NumLote = nf.NumLote
and lc.Periodo = nf.Periodo
left join PlanoContas pc on pc.Empresa = lc.Empresa
and pc.Periodo = lc.Periodo

where nf.DataMovimento = '2017-06-22'
and lc.TipoLancamento = 'D'
Responder

23/11/2017

Alexandre Daniel

Desculpa... esqueci de colocar descrições em algumas colunas no Select. Agora está correto.

Select nf.DataMovimento, nf.NumDocumento,lc.CodConta,pc.Descricao,lc.CodContrapartida, pc.Descricao from NotasFiscais nf
left join LancamentosContabeis lc on lc.Empresa = nf.Empresa
and lc.NumLancamento = nf.NumLancamento
and lc.NumLote = nf.NumLote
and lc.Periodo = nf.Periodo
left join PlanoContas pc on pc.Empresa = lc.Empresa
and pc.Periodo = lc.Periodo

where nf.DataMovimento = '2017-06-22'
and lc.TipoLancamento = 'D'
Responder

23/11/2017

Winston Jesus

Não sei se você percebeu, mas existem duplicidade no campo "Descricao" na primeira linha o que faz com ele seja retornado duas vezes, (CodConta, Descricao, CodContrapartida, Descricao).
Responder

23/11/2017

Alexandre Daniel

Sim, percebi, mas é exatamente isso que eu preciso. Preciso que seja informado os nomes das respectivas contas. Por isso que coloquei a descrição. A coluna "CodConta" e " CodContrapartida" busca no mesmo lugar as informações. Só que estão nesta tabela em duas posições distintas. Ela busca a conta na tabela PlanoContas.
Responder

23/11/2017

Winston Jesus

Sim, mas veja o seguinte você esta criando um alias para a tabela porem nos dois campos descrição você esta informado a mesma tabela,
pc.Descricao,lc.CodContrapartida, pc.Descricao o que faz com que ele repita a descrição duas vezes da mesma tabela, sendo que acredito que a descrição que você quer esta em outra tabela.
Responder

23/11/2017

Alexandre Daniel

Eu entendi o que disse. Deixa eu exemplificar para ver se consigo passar a informação. A tabela PlanoContas é assim:

Empresa - PK
Periodo - PK
Tradutor - PK
Descricao
.....

A Tabela LancamentosContabeis , as colunas são assim:

Empresa - PK
Periodo - PK
NumLote -PK
CodConta
CodContrapartida

Então, tanto a "CodConta" como a "CodContrapartida" da tabela LancamentoContabeis, possui os dados da coluna "Tradutor" da tabela PlanoContas. É ai que estou tendo a dificuldade de trazer as respectivos " Nomes " das contas que estão na tabela PlanoContas.
Responder

24/11/2017

Alexandre Daniel

Boa Tarde

Winston Jesus, meus parabéns. Sua linha de raciocínio foi certeira. Deu certo um relatório que a tempos estava com dúvidas de como trazer esse resultado. Muito obrigado pela sua ajuda.

Parabéns!
Responder

24/11/2017

Winston Jesus

Legal, fico feliz que tenha conseguido e sempre que precisar estamos por aqui, um grande abraço e sucesso!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar