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