Fórum Duvidas com campos agregados no CDS? #367489
03/01/2009
0
Numa tabela normal poderia fazer assim
select count(distinct(soma)) from somas
Numa tabela temporaria com um campo agregate não achei um modo de fazer igual
posso usar até assim na expressão da propriedade do campo agregate
count(soma)
Mais assim
count(distinct(soma))
Não funciona.
E relamente preciso usar um distinct para contar nesta [b:905bb820be]tab temp[/b:905bb820be] ai
A tabela temp esta assim
[b:905bb820be]52
52
52
01
01
02
03[/b:905bb820be]
Se eu usar um count me retorna = 7
e com o distict que seria como preciso me retornaria = 4
Adriano_servitec
Curtir tópico
+ 0Posts
03/01/2009
Builder
select count(*) from (select distinct(SOMA) from SOMAS)
Gostei + 0
03/01/2009
Adriano_servitec
Obrigado pela ajuda amigo.
Gostei + 0
03/01/2009
Builder
Ao invés de montar e calcular/contar, já larga a tabela com tudo ok de uma tacada só (solução alternativa/possibilidade, pois alguns problemas podem ser resolvidos de várias formas).
Gostei + 0
03/01/2009
Adriano_servitec
Gostei + 0
03/01/2009
Builder
A cada inclusão/alteração, chama uma rotina que calcula e grava/regrava o campo, seja utilizando uma ação do usuário ou os eventos do cds.
Gostei + 0
03/01/2009
Adriano_servitec
É pq tenho que controlar estas funções aqui
var
Form3: TForm3;
FirstWeekDay : Integer = 2;
FirstWeekDate : Integer = 4;
week,year:Word;
implementation
{$R *.dfm}
function WeekToDate(AWeek,AYear:Integer):TDateTime;
begin
Result:=EncodeDate(AYear,1,FirstWeekDate);
Result:=Result+(AWeek-1)*7-((DayOfWeek(Result)+(7-FirstWeekDay)) mod 7);
end;
procedure DateToWeek(ADate:TDateTime; var AWeek,AYear:Word);
var
Month,Day : Word;
begin
ADate:=ADate-((DayOfWeek(ADate)-FirstWeekDay+7) mod 7)+ 7-FirstWeekDate;
DecodeDate(ADate,AYear,Month,Day);
AWeek:=(Trunc(ADate-EncodeDate(AYear,1,1)) div 7)+1;
end;
procedure TForm3.Button1Click(Sender: TObject);
begin
DateToWeek(now,week,year); {Aqui colocar o dia do calendario em vez do now}
ShowMessage(´Semana: ´+inttostr(week));
ShowMessage(inttostr(year));
end;Posso fazer isso numa tabela, mais como não vou utilizar depois vou ter que deletar toda hora, e pelo CDS temporario ficaria melhor, mais não achei uma forma de somar isso.
Grato pela ajuda amigo
Gostei + 0
03/01/2009
Builder
- TClientDataSet->Fields Editor->New Field e definiu todos os campos
- Após definir os campos, gerou a estrutura a tabela em memória (tempo de projeto) com a Ação Create DataSet sobre o TClientDataSet.
Se foi assim, a tabela esta in memory, com todos os campos definidos, e a medida que adiciona registros, poderia lançar mão da definição de alguns campos como ´Field Type Calculated´ e do evento OnCalcFields.
Gostei + 0
03/01/2009
Adriano_servitec
A tabela memoria fica gravado assim...
26/11/2008----48
27/11/2008----48
01/12/2008----50
10/12/2008----52
Então neste caso qualquer que seja o campo tem que me trazer num Text o resultado do count sem duplicidade do campo Inteiro
48
48
50
52
Result-----> 03
Gostei + 0
04/01/2009
Adriano_servitec
No TFields co campo Total na propriedade Expression estou tentando colocar a seguinte expressão:
count(distinct(soma))
Ativo certinho o campo agregate como faço normalmente com qualquer campo agregate, e na hora de ativar a Tabela Virtual o erro é este:
ClientDataSet Field ´distinct´ not found. Ou seja no que parece ele não reconheçe a função distinct como um comando e sim como um campo, e na mensagem ainda que ele ´distinct´ não foi criado ou localizado.
Como disse antes, seria tudo mais facil se viesse os valores de uma tabela fisica criada no banco, mais esta esta em memoria, não vai pro banco de dados, e eu preciso do resultado deste count sem que seja gravado no banco de dados.
Se tiver como somar isso eliminando os repetidos em memoria, não precisa ser exatamente um distinct, qualquer comando que possa mostrar o resultado corretamente esta valendo.
Gostei + 0
05/01/2009
Builder
Gostei + 0
05/01/2009
Adriano_servitec
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)