none
Comparando campos da mesma tabela RRS feed

  • Pergunta

  • Boa tarde!

    Necessito verificar se temos produtos com códigos diferentes porém com o nome fantasia totalmente igual ou produtos que tenham nome fantasia que apenas comecem com a mesma descrição. Para isso, dupliquei a tabela e já consegui verificar se o nome fantasia for totalmente igual, porém não consigo fazer com que minha consulta retorne aqueles produtos que começam com a mesma descrição.

    "SELECT DISTINCT P1.IDPRD, P1.CODIGOPRD, P1.NOMEFANTASIA, P1.TIPO, P1.INATIVO, P1.SALDOGERALFISICO
    FROM TPRD P1, TPRD P2
    WHERE  P1.IDPRD <> P2.IDPRD AND
           P1.NOMEFANTASIA = P2.NOMEFANTASIA  AND
           P1.INATIVO = '0' AND P2.INATIVO = '0' AND
           P1.CODIGOPRD LIKE '%.%.%.%'
    ORDER BY P1.NOMEFANTASIA, P1.CODIGOPRD"

    Desde já agradeço.

    terça-feira, 16 de julho de 2013 19:17

Todas as Respostas

  • Como não sei qual é o campo que é descrição simulei um DESC 

    Tente isso :

    SELECT DISTINCT P1.IDPRD, P1.CODIGOPRD, P1.NOMEFANTASIA, P1.TIPO, P1.INATIVO, P1.SALDOGERALFISICO 
    FROM TPRD P1, TPRD P2
    WHERE  P1.IDPRD <> P2.IDPRD AND
           (P1.NOMEFANTASIA = P2.NOMEFANTASIA 
    	OR P1.NOMEFANTASIA LIKE '' + LEFT(P1.DESC,3) + '%'
            OR P2.NOMEFANTASIA LIKE '' + LEFT(P2.DESC,3) + '%')
    
    AND
           P1.INATIVO = '0' AND P2.INATIVO = '0' AND
           P1.CODIGOPRD LIKE '%.%.%.%'
    ORDER BY P1.NOMEFANTASIA, P1.CODIGOPRD

    No caso estou limitando apenas 3 caracteres iniciais de descrição. Você poderá aumentar o limite.

    Mas para o seu caso a melhor solução é criar um Procedure pois com ela não precisaria controlar o tamanho fixo de exibição dos caracteres.

    Espero ter ajudado.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quarta-feira, 17 de julho de 2013 17:09
  • Cara pode usar este comando.

    select Nome, Count(Nome) from Tabela
    group by Nome
    having Count(Nome)>1

    Ou o contains

    Abraço.

    quarta-feira, 17 de julho de 2013 17:18
  • Davi,

    A descrição que disse é o que está escrito no nome fantasia. Portanto, no meu select eu busco o ID do Prod,  código, nome fantasia, tipo, se ele está inativo ou não e o saldo. No caso, eu dupliquei a tabela de produto, e comparo se o nome fantasia do primeiro é igual ao segundo, se ele está ativo no sistema e se possui a máscara informada.

    Eu não tenho esse campo 'descrição' que você simulou. Teria outra forma de fazer?

    Obrigado pela ajuda!

    quinta-feira, 18 de julho de 2013 18:46
  • Então só mude para o fantasia :

    Assim : 

    SELECT DISTINCT P1.IDPRD, P1.CODIGOPRD, P1.NOMEFANTASIA, P1.TIPO, P1.INATIVO, P1.SALDOGERALFISICO 
    FROM TPRD P1, TPRD P2
    WHERE  P1.IDPRD <> P2.IDPRD AND
           (P1.NOMEFANTASIA = P2.NOMEFANTASIA 
    	OR P1.NOMEFANTASIA LIKE '' + LEFT(P2.NOMEFANTASIA,3) + '%'
            OR P2.NOMEFANTASIA LIKE '' + LEFT(P1.NOMEFANTASIA,3) + '%')
    
    AND
           P1.INATIVO = '0' AND P2.INATIVO = '0' AND
           P1.CODIGOPRD LIKE '%.%.%.%'
    ORDER BY P1.NOMEFANTASIA, P1.CODIGOPRD

    Mas torno a disser que a melhor solução é Procedures. Veja se com o código que acabei de alterar irá lhe atender.


    Davi Murilo Referência Principal : Jesus que ilumina minha mente.
    Referência Profissonal : http://www.tidm.com.br

    quinta-feira, 18 de julho de 2013 18:51
  • cara vc tbm pode usar este se assim desejar, lembrando que o nome da minha tabela é <red>CLIENTE<\red> e o campo de comparação é NOME_CLIENTE</red>

    SELECT * FROM CLIENTE WHERE NOME_CLIENTE IN ( SELECT NOME_CLIENTE FROM dbo.CLIENTE GROUP BY NOME_CLIENTE HAVING count(*) = 1) ORDER BY NOME_CLIENTE

    quinta-feira, 22 de agosto de 2013 23:37