DISTINCT
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?
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?
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
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"
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
sql = "SELECT DISTINCT Descricao, LM_1 FROM Dados WHERE Descricao like '%" & TxtBusca.text & "%' ORDER BY LM_1"
Veja se assim resolve seu problema
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]
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]
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+
Se for assim, teremos outro problema, vc TEM q pegar a Descricao, pq imagine, tem os registros:
LM_1 | Descricao | [/th]
1406 | Correia dentada |
1406 | Correia sei la do q |
1406 | Correia desdentada |
1406 | Correia blablabla |
1406 | Otra 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:
Total | LM_1 | [/th]
4 | 1406 |
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+
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.
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.
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...
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...
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?
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
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
Matioli, não deu erro mas carregou incorretamente dess forma:
1
1
9
1
1
9
1
1
9
1
1
9
1
1
9
1
1
9
é 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.
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.
Marcos, ai vc me quebrou! Nem sei por onde começar.
Tópico encerrado , respostas não são mais permitidas