Select com dados duplicados
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.
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
Curtidas 0
Respostas
Huidemar Costa
20/01/2016
Eu usaria o DISTINCT
exemplo
Select DISTINCT
campo1,
campo2......
exemplo
Select DISTINCT
campo1,
campo2......
GOSTEI 0
Marcelo
20/01/2016
Ola Huidemar,
Já tentei tanta coisa e não funcionou, teria como montar este select para saber como funciona
esta sintaxe?
Já tentei tanta coisa e não funcionou, teria como montar este select para saber como funciona
esta sintaxe?
GOSTEI 0
Huidemar Costa
20/01/2016
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
GOSTEI 0
Marcelo
20/01/2016
Não funcionou, saiu tudo duplicado como no exemplo que mandei.
:-(
:-(
GOSTEI 0
Marcos P
20/01/2016
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 ?!?
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 ?!?
GOSTEI 0
Huidemar Costa
20/01/2016
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:
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.
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.
GOSTEI 0
Marcelo
20/01/2016
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"... :-(
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"... :-(
GOSTEI 0
Fabiano Carvalho
20/01/2016
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
GOSTEI 0
Fabiano Carvalho
20/01/2016
Veja que criei uma query dentro dos parenteses para saber se possui registros duplicados ou não.
Veja mais sobre Funcoes de Classificacao
Veja mais sobre Funcoes de Classificacao
GOSTEI 0
Marcelo
20/01/2016
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.
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.
GOSTEI 0
Huidemar Costa
20/01/2016
É 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 ->
O problema está na coluna duplicata, veja nesse último SQL eu tirei a coluna duplicata, MAS mantive o DISTINCT.
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.
GOSTEI 0
Marcos P
20/01/2016
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.
Tente as dicas postadas e informe... quem sabe a solução já está no próprio post !
Senão funcionar, partimos para o SqlFiddle.
GOSTEI 0
Marcos P
20/01/2016
E aí ?
GOSTEI 0
Helder
20/01/2016
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
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
GOSTEI 0