Delphi ClientDataset聚合不同

Delphi ClientDataset聚合不同,delphi,delphi-xe,Delphi,Delphi Xe,我有一个ClientDataSet,其中一个聚合字段计算另一个字段的平均值。我还有一个关于“组”字段的索引。运行聚合后的结果如下所示-到目前为止效果良好: 我希望实现的是将聚合减少到每组一行,如下所示: 我尝试过过滤,但显然这不起作用。我还尝试将光标克隆到一个新的数据集,该数据集在组上具有唯一索引,但也没有成功。新的ClientDataSet上的索引似乎被忽略了,尽管我克隆了光标,重置了第一个ClientDataSet的索引字段: ClientDataSet2.CloneCursor(Clie

我有一个
ClientDataSet
,其中一个聚合字段计算另一个字段的平均值。我还有一个关于“组”字段的索引。运行聚合后的结果如下所示-到目前为止效果良好:

我希望实现的是将聚合减少到每组一行,如下所示:

我尝试过过滤,但显然这不起作用。我还尝试将光标克隆到一个新的数据集,该数据集在组上具有唯一索引,但也没有成功。新的
ClientDataSet
上的索引似乎被忽略了,尽管我克隆了光标,重置了第一个
ClientDataSet
的索引字段:
ClientDataSet2.CloneCursor(ClientDataset1,True,False)

因此,对于如何实现这一目标的任何好主意,我们都非常赞赏


编辑:刚刚意识到,平均值在第二个屏幕截图中发生了变化。当然,我希望保留第一个屏幕截图中的原始值。

当每组只显示一行时,您希望在val列中看到什么?@uwerabe,val列并不重要。不管我看到的是第一个中间条目还是最后一个条目。重要的是我有一组和一个平均值。最后,如果有助于理解我的问题,我想在图表中显示这些值。@uwerabe就像从
选择组中得到的一样,将得到CDS分组中的平均值(val)。我认为用一个简单的解决方案是不可能的。只是想一想:我认为每次更改值时都需要填充一个新的数据集,以反映
Avg/Group
。您的新数据集将由Group和AvgVal组成。因此,迭代原始CD并在ClientDataSet1.GetGroupState(1)
中首先检查
gbFirst,如果为真,则添加新记录。另一种方法是如下“分组”您的显示:以下是参考: