SQL COM DUPLICIDADE DE DADOS

JOHNSTEVE 15/05/2017 16:26:09
#473956
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 ?
DAMASCENO.CESAR 15/05/2017 16:46:33
#473958
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,[txt-color=#e80000] COUNT(cadCliente.codigo) AS Total[/txt-color], 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 [txt-color=#e80000]GROUP BY cadCliente.codigo[/txt-color] 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
JOHNSTEVE 15/05/2017 17:11:03
#473959
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

JOHNSTEVE 15/05/2017 17:26:28
#473960
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.

PATRIQUE 15/05/2017 17:53:43
#473961
Resposta escolhida
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
JOHNSTEVE 15/05/2017 18:48:57
#473962
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.
PATRIQUE 15/05/2017 20:41:41
#473966
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.
DAMASCENO.CESAR 15/05/2017 22:06:48
#473976
Qual seu banco de dados?
JOHNSTEVE 16/05/2017 07:29:08
#473981
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

JOHNSTEVE 16/05/2017 07:31:17
#473982
Citação:

:
Qual seu banco de dados?



Bom bia DAMASCENO.CESAR,
eu uso o Access

DAMASCENO.CESAR 16/05/2017 14:26:10
#473992
GROUP BY no access é uma m*****, se os campos no select não estiver também no group dá esse erro
Tópico encerrado , respostas não são mais permitidas