Busca e Resultado Iguais

SQL

23/11/2017

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

Curtidas 0

Melhor post

Winston Jesus

Winston Jesus

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
GOSTEI 3

Mais Respostas

Winston Jesus

Winston Jesus

23/11/2017

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

Alexandre Daniel

23/11/2017

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'
GOSTEI 0
Alexandre Daniel

Alexandre Daniel

23/11/2017

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'
GOSTEI 0
Winston Jesus

Winston Jesus

23/11/2017

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).
GOSTEI 0
Alexandre Daniel

Alexandre Daniel

23/11/2017

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.
GOSTEI 0
Winston Jesus

Winston Jesus

23/11/2017

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.
GOSTEI 0
Alexandre Daniel

Alexandre Daniel

23/11/2017

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.
GOSTEI 0
Alexandre Daniel

Alexandre Daniel

23/11/2017

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!
GOSTEI 0
Winston Jesus

Winston Jesus

23/11/2017

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

John

23/11/2017

Compre 100% de dinero falsificado indetectable grado A






Somos el mejor y único productor de billetes falsos indetectables de ALTA CALIDAD, con más de mil millones de nuestros productos circulando en todo el mundo. Suministramos NOTAS originales de alta calidad de billetes falsos a todos los países del mundo.
ESTOS BILLETES SON ALTAMENTE INDISTINGUIBLES AL TOQUE Y LA SENSACIÓN DE LAS MANOS Y LA MIRADA DE LOS OJOS DESNUDOS. ESTE DINERO LLEVA SERIES INDIVIDUALES Y EXCLUYE TODAS LAS PRUEBAS DE SEGURIDAD, INCLUIDAS LAS LÁMPARAS DE LUZ ULTRAVIOLETA Y DE PENÍNSULAS DE YODO.

Ofrecemos NOTAS falsas de alta calidad para las siguientes monedas;


EUR - Euro
USD - Dólar estadounidense
DNR - DINAR
GBP - Libra esterlina
INR - Rupia india
AUD - Dólar australiano
CAD - Dólar canadiense
AED - Dirham de Emirati
ZAR - Rand
CHF - Franco suizo
CNY - Chino Yuan Renminbi
MYR - Ringgit malasio
THB - Baht tailandés



Envía un mensaje de texto (o llama) a WhatsApp Me: +237651139494 o envíame un correo electrónico a: (worldwiderealdocuments@gmail.com)
GOSTEI 0
POSTAR