Inquiridor
Comparando campos da mesma tabela

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.
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- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 19 de julho de 2013 13:08
-
-
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!
-
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- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 19 de julho de 2013 13:08
-
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