SQL COM DUPLICIDADE DE DADOS
                    Boa tarde galera, estou com uma dúvida no meu SQL q não estou conseguindo retirar a duplicidade.
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 ?
              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 ?
                    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
            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
                    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
                
            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
                    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.
                
            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.
                    Boa tarde, 
Nesse caso, acredito que podes remover a coluna referente a data de emissão que deverá resolver.
            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 
                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.
                    String SQL proposto, fica algo assim (Com base no teu código inicial):
Espero ter ajudado. Abraços.
              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.
                    Qual seu banco de dados? 
                
            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

                Citação::
Qual seu banco de dados?
Bom bia DAMASCENO.CESAR,
eu uso o Access

                    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