Distinct

10/03/2003

0

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

Responder

Posts

10/03/2003

Btovix

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


Responder

11/03/2003

Anonymous

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?


Responder

11/03/2003

Medreis

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...


Responder

11/03/2003

Medreis

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


Responder

11/03/2003

Btovix

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!


Responder

11/03/2003

Anonymous

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


Responder

11/03/2003

Adilsond

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)


Responder

11/03/2003

Anonymous

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!



Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar