Select com dados duplicados

20/01/2016

0

Ola pessoal,
Estou com um select retornando dados duplicados e ainda não consegui uma solução:

SELECT ITENS.ite_ordem_compra, ITENS.ite_entrada, ITENS.ite_custo_atual, APAGAR.APA_DUPLICATA, APAGAR.apa_razao_social
FROM ITENS INNER JOIN APAGAR ON ITENS.ite_ordem_compra = APAGAR.APA_ORDEM_COMPRA
WHERE ITENS.ITE_CODIGO_MATERIAL = '113' ORDER BY ITENS.ITE_ORDEM_COMPRA

O Select funciona, mas vem dados duplicados do APAGAR quando as notas do Contas a Pagar tem vários registros com a mesma ordem de compra e
varias duplicatas

OC Entrada custo Duplicata Razao Social
=======================================
0000090 30 12.00 411315/1 Kalunga
0000092 40 13.80 028123/1 C&C
0000092 40 13.80 028123/2 C&C (Esse registro não era para sair, por ser mais de 1 duplicatas no Ctas a Pagar)
0000097 20 14.00 040765/1 Casa & Video

Alguém teria uma idéia de como retirar estes registros duplicados vindo do APAGAR ?
Grato pela atenção.
Marcelo

Marcelo

Responder

Posts

20/01/2016

Huidemar Costa

Eu usaria o DISTINCT
exemplo
Select DISTINCT
campo1,
campo2......
Responder

20/01/2016

Marcelo

Ola Huidemar,
Já tentei tanta coisa e não funcionou, teria como montar este select para saber como funciona
esta sintaxe?
Responder

20/01/2016

Huidemar Costa

Seria assim:
SELECT DISTINCT
ITENS.ite_ordem_compra, 
ITENS.ite_entrada, 
ITENS.ite_custo_atual, 
APAGAR.APA_DUPLICATA,
APAGAR.apa_razao_social
FROM ITENS INNER JOIN APAGAR ON (ITENS.ite_ordem_compra = APAGAR.APA_ORDEM_COMPRA)
WHERE ITENS.ITE_CODIGO_MATERIAL = '113' ORDER BY ITENS.ITE_ORDEM_COMPRA
Responder

20/01/2016

Marcelo

Não funcionou, saiu tudo duplicado como no exemplo que mandei.
:-(
Responder

20/01/2016

Marcos P

Marcelo,

O DISTINCT, obrigatoriamente, tem de resolver isso aí !

Senão resolveu é porque existem colunas que você está incluindo no SELECT que ainda estão gerando valores diferentes...

Faça um teste simples... usando a query do Huidemar deixe o DISTINCT e apenas a coluna ITENS.ite_ordem_compra.

Continuam aparecendo duplicações ?

Se sim, crie a estrutura de dados no SqlFiddle, crie a estrutura de dados, popule as tabelas e volte aqui... que tento lhe ajudar com o JOIN.

Se não, vá acrescentando as colunas na query uma-a-uma até achar aquela que está desempatando seu DISTINCT.

Ok ?!?
Responder

20/01/2016

Huidemar Costa

eu estava relendo seu post, agora eu acho que entendi o que vc está querendo, não que é os dados estão duplicados, é que quando tem mais de uma duplicata você quer que mostre apenas uma correto? no seu exemplo a duplicata 028123 está aparecendo 2x porque é parcela 1 e 2, entretanto você quer que mostre apenas a parcela 1, correto?

para isso você pode fazer mais ou menos assim:
SELECT DISTINCT
ITENS.ite_ordem_compra, 
ITENS.ite_entrada, 
ITENS.ite_custo_atual, 
(select first 1  APA_DUPLICATA from apagar where APA_ORDEM_COMPRA=ITENS.ite_ordem_compra order by apa_duplicata) apa_duplicata,
APAGAR.apa_razao_social
FROM ITENS INNER JOIN APAGAR ON (ITENS.ite_ordem_compra = APAGAR.APA_ORDEM_COMPRA)
WHERE ITENS.ITE_CODIGO_MATERIAL = '113' ORDER BY ITENS.ITE_ORDEM_COMPRA



Acredito que deve ser isto que você quer...
Deve existir outra maneira, no entanto, não consigo pensar em outra, mas, veja se é isso o que você precisa.
Responder

21/01/2016

Marcelo

Sim, as duplicatas são várias parcelas, mas só me interessa pegar os dados de 1 delas, onde tem o nome do fornecedor, data
da emissão, etc...

Mas seu exemplo não funcionou, deu erro neste FIRST 1. (Incorrect syntax near '1'.) Não funciona com TOP também.
Removendo este first 1, da outro erro:

Msg 1033, Level 15, State 1, Line 5
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

Também não consegui detectar o que estar "herrado"... :-(
Responder

21/01/2016

Fabiano Carvalho

Tente isso.

SELECT 
ITENS.ite_ordem_compra, 
ITENS.ite_entrada, 
ITENS.ite_custo_atual, 
APAGAR.APA_DUPLICATA,
APAGAR.apa_razao_social
FROM ITENS INNER JOIN 
(SELECT ROW_NUMBER() OVER(PARTITION BY APA_ORDEM_COMPRA ORDER BY APA_ORDEM_COMPRA) D,* FROM
APAGAR) AS APAGAR
ON (ITENS.ite_ordem_compra = APAGAR.APA_ORDEM_COMPRA)
WHERE ITENS.ITE_CODIGO_MATERIAL = '113' 
AND APAGAR.D = 1
ORDER BY ITENS.ITE_ORDEM_COMPRA
Responder

21/01/2016

Fabiano Carvalho

Veja que criei uma query dentro dos parenteses para saber se possui registros duplicados ou não.

Veja mais sobre Funcoes de Classificacao
Responder

21/01/2016

Marcelo

Ola Marcos P,
Como disse na mensagem anterior, não funcionou...
Após alguns testes neste tal de Sqlfidle, consegui fazer a estrutura e os dados nos 2 arquivos, e rodei um
select simples neles e apresentou os dados.
E agora? O que fazer para você ter acesso a essa tela? Passar o link?
http://sqlfiddle.com/#!3/1646a/3
Abraços.
Responder

21/01/2016

Huidemar Costa

É que o first funciona no FireBird, para o seu banco de dados, eu não conheço o comando para selecionar apenas 1 registro.

Você precisa do número da Duplicata?

Se não for precisar tire e o sql dverá ficar assim ->

SELECT DISTINCT
ITENS.ite_ordem_compra,
ITENS.ite_entrada,
ITENS.ite_custo_atual,
APAGAR.apa_razao_social
FROM ITENS INNER JOIN APAGAR ON (ITENS.ite_ordem_compra = APAGAR.APA_ORDEM_COMPRA)
WHERE ITENS.ITE_CODIGO_MATERIAL = '113' ORDER BY ITENS.ITE_ORDEM_COMPRA


O problema está na coluna duplicata, veja nesse último SQL eu tirei a coluna duplicata, MAS mantive o DISTINCT.
Responder

21/01/2016

Marcos P

Muita gente ( boa ) passou por aqui para ajudar !

Tente as dicas postadas e informe... quem sabe a solução já está no próprio post !

Senão funcionar, partimos para o SqlFiddle.
Responder

22/01/2016

Marcos P

E aí ?
Responder

19/02/2016

Helder

Olá pessoal, tudo bem?
Não sei se já conhecem, mas existe uma plataforma para criação de webservices muito eficiente, basta apenas liberar acesso para o banco de dados, e você pode criar uma nova tabela, um novo campo com apenas um clique, talvez ajude muito vocês.
Fica a indicação do Datasocket.
datasocket.co/free
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar