SQL COM DUPLICIDADE DE DADOS

 Tópico anterior Próximo tópico Novo tópico

SQL COM DUPLICIDADE DE DADOS

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#473956 - 15/05/2017 16:26:09

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


Boa tarde galera, estou com uma dúvida no meu SQL q não estou conseguindo retirar a duplicidade.

  Dim sql As String = "SELECT DISTINCT NFe_Dados.data_emissao, NFe_Dados.ID_Destinatario, cadCliente.codigo, cadCliente.nome, cadCliente.cod_Pais, cadCliente.cnpj, cadCliente.cpf, cadCliente.inscEstadual, cadCliente.lagradouro, cadCliente.numero, cadCliente.complemento, cadCliente.bairro FROM cadCliente RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario] WHERE data_emissao between @datainicial and @datafinal order by NFe_Dados.data_emissao asc"


O resultado é o seguinte
data emissao - Id destinatario
13/04/2017 -  2 - cliente X
14/04/2017 - 2 - cliente X
15/04/2017 - 3 - cliente y
16/04/2017 - 4 - cliente z
17/04/2017 - 3- cliente y
18/04/2017 - 5 - cliente z
.....

Daí galera, estou querendo eliminar essas repetição de cliente.
deixando apenas 1 cliente.
provavelmente seria o resultado assim

13/04/2017 -  2 - cliente X
15/04/2017 - 3 - cliente y
16/04/2017 - 4 - cliente z

Coloquei o DISTINCT, porem não solucionou. alguem poderia da uma ajuda nesse SQL ?



#473958 - 15/05/2017 16:46:33

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Se voce usar o GROUP BY, vai aparecer apenas um cliente, mas no caso de dois lançamentos para o mesmo cliente, qual a data correta que você vai querer? Observe que o cliente X possui duas datas distintas, por isso mostrou os dois registros.
Agora se não importa a data de emissão e a quantidade de lançamentos dentro do periodo, faça assim:

Dim sql As String = "SELECT NFe_Dados.data_emissao, NFe_Dados.ID_Destinatario, cadCliente.codigo, COUNT(cadCliente.codigo) AS Total, cadCliente.nome, cadCliente.cod_Pais, cadCliente.cnpj, cadCliente.cpf, cadCliente.inscEstadual, cadCliente.lagradouro, cadCliente.numero, cadCliente.complemento, cadCliente.bairro FROM cadCliente RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario] WHERE data_emissao between @datainicial and @datafinal GROUP BY cadCliente.codigo order by NFe_Dados.data_emissao asc"

Essa alteração pegará apenas um código do cliente e a primeira data disponível. Acho isso errado, já que você está pesquisando também a data de emissão da nota. Esse resultado vai apenas lhe mostrar quais os clientes tiveram notas emitidas no período, nesse caso, exibir a data não servirá para nada, pois será uma informação incompleta

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#473959 - 15/05/2017 17:11:03

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


 Anexos estao visíveis somente para usuários registrados

DAMASCENO.CESAR, não deu certo

eu estou gerando o SPED FISCAL, dai não pode ter duplicidade de codigo de cliente. quer dizer não pode conter o mesmo cliente no mesmo periodo.
por isso so preciso pegar apenas 1 cliente.a data de emissao eu nem vou pegar... vou precisar apenas dos dados do cliente.. a data de emissão é apenas para fazer o filtro. nos meus DateTimer





#473960 - 15/05/2017 17:26:28

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


DAMASCENO.CESAR,  a Data de Emissão eu não vou precisar. apenas deixei no SQL para fazer o Filtro.
oq preciso mesmo  é apenas os Dados do Cliente.
conforme o manual do SPedFiscal, só é permitido apenas 1 cliente durante o periodo. o mesmo seria com Fornecedor.





Resposta escolhida #473961 - 15/05/2017 17:53:43

PATRIQUE
PORTO ALEGRE
Cadast. em:Maio/2009


Boa tarde,
Nesse caso, acredito que podes remover a coluna referente a data de emissão que deverá resolver.

  SELECT DISTINCT
    NFe_Dados.ID_Destinatario,
    cadCliente.codigo,
    cadCliente.nome,
    cadCliente.cod_Pais,
    cadCliente.cnpj,
    cadCliente.cpf,
    cadCliente.inscEstadual,
    cadCliente.lagradouro,
    cadCliente.numero,
    cadCliente.complemento,
    cadCliente.bairro
FROM cadCliente
    RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario]
WHERE data_emissao between @datainicial and @datafinal
order by NFe_Dados.data_emissao asc


Um guerreiro sabe que os fins não justificam os meios. Porque não existem fins; existem apenas os meios. (Paulo Coelho)


#473962 - 15/05/2017 18:48:57

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


Citação:
:
Boa tarde,
Nesse caso, acredito que podes remover a coluna referente a data de emissão que deverá resolver.

  SELECT DISTINCT
    NFe_Dados.ID_Destinatario,
    cadCliente.codigo,
    cadCliente.nome,
    cadCliente.cod_Pais,
    cadCliente.cnpj,
    cadCliente.cpf,
    cadCliente.inscEstadual,
    cadCliente.lagradouro,
    cadCliente.numero,
    cadCliente.complemento,
    cadCliente.bairro
FROM cadCliente
    RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario]
WHERE data_emissao between @datainicial and @datafinal
order by NFe_Dados.data_emissao asc


PATRIQUE, não da certo. eu preciso diretamente no SQL. traz apenas 1 de cada.



#473966 - 15/05/2017 20:41:41

PATRIQUE
PORTO ALEGRE
Cadast. em:Maio/2009


String SQL proposto, fica algo assim (Com base no teu código inicial):

  Dim sql As String = "SELECT DISTINCT NFe_Dados.ID_Destinatario, cadCliente.codigo, cadCliente.nome, cadCliente.cod_Pais, cadCliente.cnpj, cadCliente.cpf, cadCliente.inscEstadual, cadCliente.lagradouro, cadCliente.numero, cadCliente.complemento, cadCliente.bairro FROM cadCliente RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario] WHERE data_emissao between @datainicial and @datafinal order by NFe_Dados.data_emissao asc"


Espero ter ajudado. Abraços.

Um guerreiro sabe que os fins não justificam os meios. Porque não existem fins; existem apenas os meios. (Paulo Coelho)


#473976 - 15/05/2017 22:06:48

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


Qual seu banco de dados?

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


#473981 - 16/05/2017 07:29:08

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


Citação:
:
String SQL proposto, fica algo assim (Com base no teu código inicial):

  Dim sql As String = "SELECT DISTINCT NFe_Dados.ID_Destinatario, cadCliente.codigo, cadCliente.nome, cadCliente.cod_Pais, cadCliente.cnpj, cadCliente.cpf, cadCliente.inscEstadual, cadCliente.lagradouro, cadCliente.numero, cadCliente.complemento, cadCliente.bairro FROM cadCliente RIGHT JOIN NFe_Dados ON cadCliente.[codigo] = NFe_Dados.[ID_Destinatario] WHERE data_emissao between @datainicial and @datafinal order by NFe_Dados.data_emissao asc"


Espero ter ajudado. Abraços.


Bom dia Amigos...
PATRIQUE vlw deu certo aqui.. eu tava usando o DISTINCT porem não tava apontando qual ele teria q pegar. kkkkkkk então seria no inicio do SQL. o ID do destinatario





#473982 - 16/05/2017 07:31:17

JOHNSTEVE
COSMOPOLIS-SP
Cadast. em:Janeiro/2016


Citação:
:
Qual seu banco de dados?


Bom bia DAMASCENO.CESAR,
eu uso o Access





#473992 - 16/05/2017 14:26:10

DAMASCENO.CESAR
ADAMANTINA
Cadast. em:Fevereiro/2009


GROUP BY no access é uma m*****, se os campos no select não estiver também no group dá esse erro

O conhecimento é como o dinheiro: quanto mais temos, mais queremos ter (Josh Billings)  


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por JOHNSTEVE em 17/05/2017 20:40:39