Office中国论坛/Access中国论坛

标题: 【求助】关于报表分组排序问题 - 请大家帮帮忙(已解决) [打印本页]

作者: 5574916    时间: 2011-9-24 23:37
标题: 【求助】关于报表分组排序问题 - 请大家帮帮忙(已解决)
本帖最后由 5574916 于 2011-9-26 18:19 编辑

数据库里有一个订单表和一个报表。

请问要如何实现报表中按客户分好组后,再按每一组的销售额排序,也就是按客户的销售额进行排名。

[attach]46754[/attach]

例子: [attach]46756[/attach]
作者: roych    时间: 2011-9-25 03:44
本帖最后由 roych 于 2011-9-25 10:02 编辑

插入一个模块,把下面代码复制进去,然后在来源里输入:=PM([销售额]),具体看附件:
  1. Function PM(Ctl As Control) As Long
  2. Dim Z As Long
  3. '打开分组求和降序排列的记录集
  4. Dim rst As New ADODB.Recordset
  5. rst.Open "SELECT 订单.客户名称, Sum(订单.本单金额) AS 总计 FROM 订单 GROUP BY 订单.客户名称 ORDER BY Sum(订单.本单金额) DESC", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
  6. '如果数据不多,这两行可以不要(目的在于快速读取数据而已)。
  7. rst.MoveLast
  8. rst.MoveFirst
  9. '由于前面是降序排列,那么位置先后即为名次。
  10. For Z = 1 To rst.RecordCount
  11.     If Ctl.Value = rst(1) Then
  12.         PM = rst.AbsolutePosition
  13.     End If
  14. '排完第一个名次后,把光标移动到下一行,继续循环排名
  15. rst.MoveNext
  16. Next
  17. '关闭记录集和释放内存。
  18. rst.Close
  19. Set rst = Nothing
  20. End Function
复制代码
[attach]46758[/attach]
题外话,这个图片很熟悉,记得在某部国外的电影上(不过忘了叫什么了)看过这个情节。
作者: 5574916    时间: 2011-9-25 10:09
本帖最后由 5574916 于 2011-9-25 10:10 编辑

{:soso__17749219952028839553_2:} 谢谢roych的教程,我还不知道原来可以这样呢!{:soso_e113:}
能不能进一步再实现下图说明的将排名高低从前往后排,我在报表设计里的排序与分组设置,不过要怎么填入按排名数字进行排序呢?
[attach]46759[/attach]
作者: roych    时间: 2011-9-25 22:08
如果那样,可能需要修改数据源(或者做子报表)。——而前面的自定义函数可以不用了(用累计=1就够了),详细看附件。[attach]46761[/attach]


作者: 5574916    时间: 2011-9-26 16:34
roych 发表于 2011-9-25 22:08
如果那样,可能需要修改数据源(或者做子报表)。——而前面的自定义函数可以不用了(用累计=1就够了),详 ...

正解,多谢指教!
作者: yanghua1900363    时间: 2011-9-26 17:28
正需要 谢谢分享!
作者: joyark    时间: 2011-9-27 03:39
谢谢分享!
作者: jedtang    时间: 2011-12-6 17:05
看一下
作者: jedtang    时间: 2011-12-6 17:15
看不明白例




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3