Usuário com melhor resposta
Erro na busca de registros duplicados

Pergunta
-
Bom dia, boa tarde e boa noite!
Criei uma nova pergunta pois todas que encontrei aqui não solucionam meu problema.
Tenho uma tabela simples de dados e preciso extrair somente os registros duplicados.
Estou usando a seguinte consulta
SELECT data, vendeu, modelo, imei, servico, Colunas1, Colunas2, linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli, [CHK LINHA] FROM ['lista de vendas'] GROUP BY data, linha HAVING COUNT(linha)>1
Porem ao rodar está dando o seguinte erro:
Alguém tem uma solução?
Desde já agradeço a atenção.
Abraços!
segunda-feira, 1 de agosto de 2016 14:54
Respostas
-
Faz assim então.. (é a coluna linha com a duplicidade certo ? )
SELECT linha, Count(*) from lv GROUP BY linha HAVING COUNT(*)>1
Vai trazer somente os duplicados
Isco Sistemas José Luiz Borges
- Marcado como Resposta Robson William Silva segunda-feira, 1 de agosto de 2016 19:42
segunda-feira, 1 de agosto de 2016 19:02 -
Entendi...
tenta fazer com CTE, para não exportar para outros tabelas e tal
WITH Duplicado (linha)
AS
(
select linha
from lv
group by linha having COUNT(*) > 1
)select data, vendeu, modelo, imei, servico, lv.linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli FROM lv inner join Duplicado on (dbo.lv.linha=dbo.duplicadas.linha) order by dbo.lv.linha
Tenta ai.. qualquer coisa avisa
Isco Sistemas José Luiz Borges
- Sugerido como Resposta Robson William Silva terça-feira, 2 de agosto de 2016 20:22
- Marcado como Resposta Don Medina terça-feira, 2 de agosto de 2016 20:25
segunda-feira, 1 de agosto de 2016 20:11
Todas as Respostas
-
Olá,
O nome da sua table é "lista de vendas"??
segunda-feira, 1 de agosto de 2016 14:58 -
Sim, é o nome da Table.segunda-feira, 1 de agosto de 2016 14:59
-
Fala amigo...
Quando você tem uma função no seu SELECT como por exemplo, SUM, COUNT todas as colunas do seu select devem estar também em GROUP BY .
Então escreva seu SQL,
ou colocando os campos "vendeu, modelo, imei, servico, Colunas1, Colunas2, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpd_cli, nom_cli " também depois de GROUP BY
Ou retirando estas colunas do SELECT.
SELECT data, Count(linha) FROM ['lista de vendas'] GROUP BY data, linha HAVING COUNT(linha)>1
Isco Sistemas José Luiz Borges
- Marcado como Resposta Don Medina segunda-feira, 1 de agosto de 2016 17:32
- Não Marcado como Resposta Don Medina segunda-feira, 1 de agosto de 2016 17:32
segunda-feira, 1 de agosto de 2016 16:26 -
Fala amigo...
Quando você tem uma função no seu SELECT como por exemplo, SUM, COUNT todas as colunas do seu select devem estar também em GROUP BY .
Então escreva seu SQL,
ou colocando os campos "vendeu, modelo, imei, servico, Colunas1, Colunas2, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpd_cli, nom_cli " também depois de GROUP BY
Ou retirando estas colunas do SELECT.
SELECT data, Count(linha) FROM ['lista de vendas'] GROUP BY data, linha HAVING COUNT(linha)>1
Isco Sistemas José Luiz Borges
Boa tarde,
Acabei marcando como resposta sem querer, mas ao mesmo tempo você respondeu mas gerou nova duvida.
Quando fiz dessa forma colocando todos os campos no group by, obtive 12 respostas, porem ao usar somente um unico campo, por exemplo "linha" que é onde tenho valores duplicados, obtive 512 respostas.
Então tive que criar outra query, com um inner join entre a tabela bruta e as 512 respostas exportadas para outra tabela, ficando assim
1ª
SELECT linha from lv GROUP BY linha HAVING COUNT(linha)>1
2ª depois de exportar a resposta da primeira pra uma nova tabela
select data, vendeu, modelo, imei, servico, lv.linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli FROM lv inner join duplicadas on (dbo.lv.linha=dbo.duplicadas.linha) order by dbo.lv.linha
Ai sim obtive a saída desejada.
Existiria alguma maneira de juntar já as duas e já obter a saída final?
segunda-feira, 1 de agosto de 2016 17:56 -
Faz assim então.. (é a coluna linha com a duplicidade certo ? )
SELECT linha, Count(*) from lv GROUP BY linha HAVING COUNT(*)>1
Vai trazer somente os duplicados
Isco Sistemas José Luiz Borges
- Marcado como Resposta Robson William Silva segunda-feira, 1 de agosto de 2016 19:42
segunda-feira, 1 de agosto de 2016 19:02 -
Faz assim então.. (é a coluna linha com a duplicidade certo ? )
SELECT linha, Count(*) from lv GROUP BY linha HAVING COUNT(*)>1
Vai trazer somente os duplicados
Isco Sistemas José Luiz Borges
Relamente, desta forma obtive as 512 saídas, mas somente a coluna linha aparece e é criado a coluna com a quantidade de quantas vezes ela se repete. Porem ao tentar fazer com que saia todas as colunas, tenho que colocar todos no group by, e assim a saida volta a ter apenas 12 registros.
1ª
select linha,count(*) FROM lv group by linha having COUNT(*)>1
2ª
select data, vendeu, modelo, imei, servico, Colunas1, Colunas2, linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli, CHK, count(*) FROM lv group by data, vendeu, modelo, imei, servico, Colunas1, Colunas2, linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli, CHK having COUNT(*)>1
Essa é a diferença entre as saídas. Acho que fica melhor pra mostra e saber o erro.
segunda-feira, 1 de agosto de 2016 19:15 -
Entendi...
tenta fazer com CTE, para não exportar para outros tabelas e tal
WITH Duplicado (linha)
AS
(
select linha
from lv
group by linha having COUNT(*) > 1
)select data, vendeu, modelo, imei, servico, lv.linha, linha_adc, val_serv, plano, cpf_vend, nom_vend, cpf_cli, nom_cli FROM lv inner join Duplicado on (dbo.lv.linha=dbo.duplicadas.linha) order by dbo.lv.linha
Tenta ai.. qualquer coisa avisa
Isco Sistemas José Luiz Borges
- Sugerido como Resposta Robson William Silva terça-feira, 2 de agosto de 2016 20:22
- Marcado como Resposta Don Medina terça-feira, 2 de agosto de 2016 20:25
segunda-feira, 1 de agosto de 2016 20:11 -
Boa tarde,
Ainda não tive oportunidade de testar essa forma, mas também irei marcar como resposta. Qualquer duvida abro outra ou marco como "não propor como resposta".
Obrigado pela atenção
terça-feira, 2 de agosto de 2016 20:25