Distinct
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? :?
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
Curtidas 0
Respostas
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
Espero ter ajudado []´s
GOSTEI 0
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
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...
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
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
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
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!
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
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
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)
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
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