DISTINCT

IRENKO 25/08/2006 14:18:37
#167306
sql = "SELECT DISTINCT LM_1,Descricao FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' ORDER BY LM_1"

Na instrução acima o DISTINCT não esta funcionando, estou buscando todo documento que tenha no campo descrição uma determinada palavra. O documento, digamos 1406 que se refere a LM_1 tem 20 items, 15 items tem a palavra "Correia" no caso, a busca me retorna 15 vezes o documento 1406. Como fazer para carregar somente uma vez?
USUARIO.EXCLUIDOS 25/08/2006 15:00:57
#167325
Veja, a instrução está funcionando perfeitamente. Cada registro onde a palavra "Correia" aparece, sendo diferente dos demais, será carregado em uma linha distinta, conforme você pediu na instrução.

Para que seja listada apenas uma única linha, o DISTINCT não é o indicado com uma cláusula WHERE do tipo LIKE. Você poderia substituir por

sql = "SELECT  MAX(LM_1) AS LM_1, Descricao FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' ORDER BY LM_1" 

USUARIO.EXCLUIDOS 25/08/2006 15:10:13
#167332
Não sei se entendi bem, mas veja se é isso que vc quer:

sql = "SELECT DISTINCT Descricao, LM_1 FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' ORDER BY LM_1"

Veja se assim resolve seu problema

USUARIO.EXCLUIDOS 25/08/2006 15:42:39
#167350
Resposta escolhida
Carinha, vai depender de uma coisa, qdo vc pega esses dados, digamos q 20 registros tenham correia no meio, mas 15 são de um documento e 5 de outro, isso ocorre? Ou é sempre de um só documento mesmo?

Se for assim, teremos outro problema, vc TEM q pegar a Descricao, pq imagine, tem os registros:
[th][/th]
LM_1 Descricao
1406Correia dentada
1406Correia sei la do q
1406Correia desdentada
1406Correia blablabla
1406Otra coisa


Seria retornado então os 4 primeiros registros, mas qual descrição? A primeira? Poderias usar assim:

sql = "SELECT SUM(LM_1) Total, LM_1 FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' GROUP BY LM_1 ORDER BY LM_1"

Dessa forma retornaria:
[th][/th]
TotalLM_1
41406


Caso queira por a primeira descrição só vejo a seguinte solução:

sql = "SELECT SUM(LM_1) Total, LM_1, (SELECT DISTINCT(MAX(Descricao)) FROM Dados B where B.LM_1 = A.LM_1) FROM Dados A WHERE Descricao like '%" & TxtBusca.text & "%' GROUP BY LM_1 ORDER BY LM_1"

Ta aí algumas opções, qualquer dúvida poste...T+
IRENKO 25/08/2006 16:08:29
#167375
Matioli, sua primeira sugestão não funcionou, agora q vc quis dizer com B.LM_1 = A.LM_1?

Veja bem, o documento 1406(Lm_1) tem 20 items sendo que 15 items tem "correia" na descrição. Tambem pode buscar iniciando com Correia.
USUARIO.EXCLUIDOS 25/08/2006 16:36:05
#167395
E quantos itens você quer retornar? 4 que não tem correia mais 1 que tenha correia? Coloque um pequeno exemplo dos dados que vc tem e o que deseja selecionar....

Agora o distinct só funciona se todos os campos forem exatamente iguais, se você tiver um campo correia e outro correia dentada, mesmo que para o mesmo documento ele irá trazer os dois, por isso, te pergunto o que vc realmente quer trazer...


USUARIO.EXCLUIDOS 25/08/2006 16:47:19
#167404
Citação:

IRENKO escreveu:
Matioli, sua primeira sugestão não funcionou, agora q vc quis dizer com B.LM_1 = A.LM_1?

Veja bem, o documento 1406(Lm_1) tem 20 items sendo que 15 items tem [Ô]correia[Ô] na descrição. Tambem pode buscar iniciando com Correia.



Opa, troca o SUM por COUNT...

Agora qto ao segundo, repare q tenho um select dentro de outro, tipo:
sql = "SELECT COUNT(LM_1) Total, LM_1, (SELECT DISTINCT(MAX(Descricao)) FROM Dados B where B.LM_1 = A.LM_1) FROM Dados A WHERE Descricao like '%" & TxtBusca.text & "%' GROUP BY LM_1 ORDER BY LM_1"

O "SELECT DISTINCT(MAX(Descricao)) FROM Dados B where B.LM_1 = A.LM_1)", pegará a primeira descrição encontrada com o nr do documento encontrado...

Mas esse tb nao funfo?
IRENKO 25/08/2006 16:48:18
#167406
Trazer todos os q contiver correia na descrição ou correia no inicio. Um outro exemplo. Tenho um documento de numero 1569(LM_1) com cinco items, sendo que dois items tem na descrição (correia). Quando faço a pesquisa com a instrução:

sql = "SELECT DISTINCT LM_1,Descricao FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' ORDER BY LM_1"

Preencho o ListBox, so que carrega o numero em duplicidade:
1569
1569
justamente por causa dos dois items pesquisados.

Gostaria que fosse uma vez
IRENKO 25/08/2006 16:54:53
#167410
Matioli, não deu erro mas carregou incorretamente dess forma:

1
1
9
1
1
9
1
1
9

USUARIO.EXCLUIDOS 25/08/2006 16:59:54
#167412
é aquilo que te falei, o distinct não faz isso que você quer automaticamente...

ex: vamos supor que vc tenha 3 registros:

1569 - correia
1569 - correia dentada
1569 - correia

o Distinct irá retorna 2 registros:

1569 - correia
1569 - correia dentada

porque os registros não são exatamente iguais...

não tem como você trazer 1569 - correia - correia dentada, pois são registros diferentes, vai sempre duplicar...

Você terá de tratar a duplicidade via código.



IRENKO 25/08/2006 17:12:17
#167425
Marcos, ai vc me quebrou! Nem sei por onde começar.
Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas