不用前台循环.不用后台SQL,如何在ClientDataSet上实现这样的统计,没分了(10分)

  • 主题发起人 主题发起人 hubeizwj
  • 开始时间 开始时间
H

hubeizwj

Unregistered / Unconfirmed
GUEST, unregistred user!
不用前台循环.不用后台SQL,如何在ClientDataSet上实现这样的统计.
ID COST1 BB1 COST2 BB2
1 3 HKD 15 HKD
2 10 RMB 23 RMB
3 2 RMB 2 RMB
4 45 HKD 10 HKD
5 2 HKD 51 HKD
6 102 RMB 0 RMB
7 20 RMB 0 RMB

COST1(RMB)总计:134 COST1(HKD)总计: 50
COST2(RMB)总计: 25 COST2(HKD)总计: 76
 
只问问题,不做贡献
 
不可能实现吧
 
你在后台SQL+个 sum(COST1) as COST1汇总会死啊
 
qiuyan0519,将COST1,COST2 是按BB分组统计
 
发言已经删除
 
Writer:我是说用:Agregage 或计算字段可不可以实现
 
>>来自:hubeizwj, 时间:2006-6-23 12:36:15, ID:3479407
>>Writer:我是说用:Agregage 或计算字段可不可以实现
SORRY,当我之前没说过[:(]
 
select sum( COST1) as 合计,count( COST1) as 个数
 
to hubeizwj:
没错!就是用Aggregates实现。
 
yeskert1,就是用Aggregates实现,如何象下面的方式作:
先按BB1 分组,统计公式为:COST1(RMB)=SUM(case when BB1=RMB then
COST1 else
0 end),COST1(HKD)=SUM(case when bb1='RMB' then
COST1 else
0 end)
按BB2 分组,统计COST2(RMB)=SUM(case when Bb2=RMB then
COST2 else
0 end),COST2(HKD)=SUM(case when bb2='RMB' then
COST2 else
0 end)
 
我做过, 是给台湾工厂做的, 这程序真的很变态, 我花了差不多一个月时间.
一串关键字下面要统计出多个不同含义的值. 我用clientdataset做源, 自己
写程序统计. 其实写统计程序不是关键, 关键是速度, 要足够快.
我觉得只设定一下clientdataset的参数, 可能实现不了.
(ps. 我现在不写程序了)
 
DING 怎么用Aggregates/calculateFields实现,象下面的统计方式:
先按BB1 分组,统计公式为:COST1(RMB)=SUM(case when BB1=RMB then
COST1 else
0 end),COST1(HKD)=SUM(case when bb1='RMB' then
COST1 else
0 end)
按BB2 分组,统计COST2(RMB)=SUM(case when Bb2=RMB then
COST2 else
0 end),COST2(HKD)=SUM(case when bb2='RMB' then
COST2 else
0 end)
 
我认为如果用一个cds实现基于BB1的分组统计和基于BB2的分组统计(两者又都是第一层),
这是不可能的。如果用两个cds实现(两个cds可以共享数据)是容易的。简单操作:
1、用cds的indexDef定义一个索引,字段是BB1,指定他的grouplevel为1;
2、为cds增加一个字段,选择aggregate类型。OK之后,在Object Inspector里设置该字段
的表达式为sum(cost1),并选择grouplevel为1;--假定字段名称为a1
3、设置该字段的active为true,并设置cds的aggregatesActive为true

这样,a1字段就会字段计算了。如果要显示在dbgrid里,则先将所有字段增加到dbgrid
里,然后为dbgrid增加一个Column,其字段要手填(选不着)为a1。
如果不想显示,而是希望自己程序取,只要根据BB1定位,然后读取a1值即可。
同样的方式可以计算另外一组。
完毕!希望对你有帮助。
 
后退
顶部