Distinct

Delphi

10/03/2003

Como posso fazer um distinct com mais de um campo?

Exemplo: select distinct(tipo,numero,ano) from tabela

Tentei fazer assim: select distinct(tipo+numero+ano) from tabela
mas não deu certo, pois o campo ´tipo´ é string e os campos numero e ano são inteiros.
Alguém pode me ajudar? :?


Anonymous

Anonymous

Curtidas 0

Respostas

Btovix

Btovix

10/03/2003

Se não me engano vc pode converter os campos de inteiro para string em sql, ou o melhor seria gerar um ´campo código´ na tabela para este campo tipo, que seria utilizado neste distinct, um cd_tipo integer que estaria ligado ao tipo string, quando vc fosse buscar o campo para comparar utilizaria o cd_tipo e na hora de apresentar mostraria o campo ´tipo´ !
Espero ter ajudado []´s


GOSTEI 0
Anonymous

Anonymous

10/03/2003

Se não me engano vc pode converter os campos de inteiro para string em sql, ou o melhor seria gerar um ´campo código´ na tabela para este campo tipo, que seria utilizado neste distinct, um cd_tipo integer que estaria ligado ao tipo string, quando vc fosse buscar o campo para comparar utilizaria o cd_tipo e na hora de apresentar mostraria o campo ´tipo´ ! Espero ter ajudado []´s


Vou tentar exemplificar o que preciso fazer. Os campos abaixo são chaves primárias:

Tabela A | Tabela B
Tipo Numero Ano | Tipo Numero Ano Nome
P 10 2003 | P 10 2003 Andreia
P 20 2003 | P 10 2003 Jose
P 30 2003 | P 10 2003 Maria
| P 30 2003 Carlos
| P 30 2003 Luiza

Quero contar, da tabela B quantos protocolos diferentes tem, no caso 2.
Se eu fizer: select tipo, count(tipo) from tabela B
ele vai me retornar 5
Quero algo assim: select distinct(tipo+numero+ano) ....
ou: select count(tipo, numero, ano) ....
Consegui esclarecer o que preciso?


GOSTEI 0
Medreis

Medreis

10/03/2003

A forma de fazer vai depender o banco de dados utilizado, depois
vc deve converter os campos para o mesmo tipo de dado string, e cada servidor de BD possui funções para realizar esta conversão

Ex : oracle

select distinct to_char(codigo)||NOME||to_char(data_nascimento)
from funcionario


OK...


GOSTEI 0
Medreis

Medreis

10/03/2003

Tabela A | Tabela B
Tipo Numero Ano | Tipo Numero Ano Nome
P 10 2003 | P 10 2003 Andreia
P 20 2003 | P 10 2003 Jose
P 30 2003 | P 10 2003 Maria
| P 30 2003 Carlos
| P 30 2003 Luiza


Então de acordo com a necessidade acima vc pode usar um recurso chamado view in line

select xx.tipo, xx.numero, xx.ano , count(*)
from ( select distinct tipo, numero, ano
from tabelab
group by tipo,numero,ano ) xx
group by xx.tipo, xx.numero, xx.ano

Qualquer duvida email-me


GOSTEI 0
Btovix

Btovix

10/03/2003

vc pode tentar da seguinte forma:
Se o resultado que vc quer é 2 então tenta dar um group by com os campos e depois chama no delphi a query.recordcount que vc vai ter a quantidade de vezes que há uma alteração pra aqueles campos. Com isso vc não vai poder apresentar os dados corretamente pra puxar os dados vc vai ter que fazer outra query. Essa query simplismente conta quantos são os dados diferentes.
O group by não deixa repetir os dados que possuem aqueles campos que possuem dados iguais e o recordcount mostra a quantidade apresentada na tela!

sintaxe:
na query: group by campo1, campo2, ... ,campoN
no delphi: variavel:= query.recordcount;
Esta variável vai ter este valor!

Se eu não entendi vai me desculpando só quero ajudar!! :? Boa sorte!


GOSTEI 0
Anonymous

Anonymous

10/03/2003

A forma de fazer vai depender o banco de dados utilizado, depois vc deve converter os campos para o mesmo tipo de dado string, e cada servidor de BD possui funções para realizar esta conversão Ex : oracle select distinct to_char(codigo)||NOME||to_char(data_nascimento) from funcionario OK...




Marcio, obrigada, por enquanto, mas não funcionou, meu banco de dados é o Paradox


GOSTEI 0
Adilsond

Adilsond

10/03/2003

select B.tipo, count(*) from tabela B
where not exists (select 1 from tabela A
where a.tipo = b.tipo
and a.numero = b.numero
and a.ano = b.ano)


GOSTEI 0
Anonymous

Anonymous

10/03/2003

vc pode tentar da seguinte forma: Se o resultado que vc quer é 2 então tenta dar um group by com os campos e depois chama no delphi a query.recordcount que vc vai ter a quantidade de vezes que há uma alteração pra aqueles campos. Com isso vc não vai poder apresentar os dados corretamente pra puxar os dados vc vai ter que fazer outra query. Essa query simplismente conta quantos são os dados diferentes. O group by não deixa repetir os dados que possuem aqueles campos que possuem dados iguais e o recordcount mostra a quantidade apresentada na tela! sintaxe: na query: group by campo1, campo2, ... ,campoN no delphi: variavel:= query.recordcount; Esta variável vai ter este valor! Pessoal, consegui. Obrigada a todos que tentaram me ajudar Se eu não entendi vai me desculpando só quero ajudar!! :? Boa sorte!



GOSTEI 0
POSTAR