none
Descrição iguais RRS feed

  • Pergunta

  • Prezados Boa tarde!!

    Numa determinada tabela eu tenho Nome e gostaria de ver se tem produto cadastrados com o mesmo Nome.

    SELECT * FROM TPRODUTO

    RESULTADO

    CODIGO

    00010                CIMENTO

    00154                cimento

    Traz os produtos com código repetidos.

    obrigado

    sexta-feira, 26 de julho de 2013 17:46

Respostas

Todas as Respostas

  • Ronnie, boa tarde.

    Se vc estiver utilizando uma collation to tipo CI (case insensitive), vc poderá simplesmente agrupar o seu dado:

    select produto, max(codigo) from tbproduto group by produto having count(*) >1

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    sexta-feira, 26 de julho de 2013 17:52
  • Deleted
    sexta-feira, 26 de julho de 2013 20:50
  • Eu complementaria fazendo um replace também nos espaços, para utilizar a SOUNDEX com palavras compostas.

    http://adjuniordba.wordpress.com/2012/12/11/soundex-com-palavras-compostas/

    Um exemplo com Soundex simples:

    declare @tbproduto table (nome varchar(30))
    
    insert into @tbproduto values ('cimento')
    insert into @tbproduto values ('CIMENTO')
    insert into @tbproduto values ('CIMENT')
    insert into @tbproduto values ('TIJOLO')
    insert into @tbproduto values ('tijolo')
    insert into @tbproduto values ('TIJOL')
    
    select SOUNDEX(nome), nome from @tbproduto
    
    select COUNT(*), SOUNDEX(nome) from @tbproduto group by SOUNDEX(nome)
    


    terça-feira, 30 de julho de 2013 17:06
  • Deleted
    terça-feira, 30 de julho de 2013 19:52
  • Boa tarde!

    José executando dessa forma me retornou esse erro.

    Mensagem 156, Nvel 15, Estado 1, Procedimento Normaliza1, Linha 19

    Sintaxe incorreta prxima  palavra-chave 'with'.

    o que poderia ser ??

    quinta-feira, 1 de agosto de 2013 15:10
  • Deleted
    quinta-feira, 1 de agosto de 2013 21:20
  • Valeu pela dica, vou verificar novamente, veja o que estou executando;

     

    create function Normaliza (@pTexto varchar(2000))
    returns varchar(2000)
    begin
    declare @xTexto varchar(2000);
    -- remove espaços no início e no final do texto
    set @xTexto = ltrim(rtrim(@pTexto));
    -- remove espaços repetidos no meio do texto
    while charindex('  ',@xTexto) > 0
      set @xTexto = replace(@xTexto, '  ', ' ');
    -- retira acentuação e transforma em maiúscula
    set @xTexto = upper(@xTexto collate sql_latin1_general_cp1251_ci_as);
    -- fui!
    return @xTexto;
    end;

     

    with
    REPETIDO as (
    SELECT dbo.Normaliza(Nome) as NomeN
      from TPRODUTO
      group by dbo.Normaliza(Nome)
      having count(*)>1
    )
    SELECT R.NomeN as [Nome normalizado], T.Codigo, '>'+T.Nome+'<' as [Nome original]
      from TPRODUTO as T
           inner join REPETIDO as R on dbo.Normaliza(T.Nome)=R.NomeN
      order by R.NomeN, Codigo;

     
    sexta-feira, 2 de agosto de 2013 12:11
  • Deleted
    • Marcado como Resposta Ronnie Von sexta-feira, 2 de agosto de 2013 19:55
    sexta-feira, 2 de agosto de 2013 18:04
  • Vou verificar, valeu pessoal.

    sexta-feira, 2 de agosto de 2013 19:55