none
Erro na busca de registros duplicados RRS feed

  • 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

    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

    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

    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