设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1748|回复: 5
打印 上一主题 下一主题

[其它] 【原创 / 文章】关于多字段统计问题

[复制链接]
跳转到指定楼层
1#
发表于 2005-10-28 02:22:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在论坛上看到好几个帖子询问有关多字段的统计问题,而且有很多人关注。

多字段问题大致上可以这样定义:数据源中的多个字段包含相同含义的数据内容,因为分类不同,所以被划分为多个字段。

其实这个问题我也曾经遇到过,当时我刚刚开始学习使用Access,因为对于各个功能都不太了解,因此为了偷懒就把多个分类使用多个字段来进行表示。到了后来需要进行统计的时候,就傻眼了。

导致这类问题的根本,在于数据表设计的不合理(或者是为了向某个其他问题妥协),合理的设计方法应该是通过两个字段:数据和数据分类来标识数据。这样设计的优点是数据逻辑清晰,后期处理便利,缺点是前期录入麻烦,用户界面编写麻烦。比方说某人的3个电话号码,如果做成三条记录,想要在一个窗体中管理此人的所有数据,就不是简单点击几下鼠标就能完成了。我想这也是大多数人采用多字段的原因吧。

问题已经发生了,重新设计数据表有时候不太现实,那么让我们来讨论一下如何解决这样的表的统计问题,下面推荐几种我当时遇到这个问题所采用的解决办法,如果其他人有更好的办法,也希望不吝于分享一下:

下列方法的数据实例如下:







ID

早餐

中餐

晚餐

夜宵

<TR>

1

包子

豆浆

烧卖

油条

<TR>

2

豆浆

包子

油条

烧卖

<TR>

3

油条

烧卖

豆浆

包子

<TR>

4

烧卖

油条

包子

豆浆

1、单列统计,最后汇总。

对于每个数据列进行单独的统计,最后合并结果。这个方法适用于相似字段较多的时候。缺点是很难进行复杂的查询。

DCount("*","表1","早餐=包子")+DCount("*","表1","中餐=包子")+DCount("*","表1","晚餐=包子")DCount("*","表1","夜宵=包子")

2、单独提取数据列,进行合并,最后统计。

将不同的数据列,通过Union的方法,在查询中合并成一个新的记录集。这个方法缺点是在记录较多的时候会产生效率问题,优点是可以进行复杂的查询。

Select ID, 早餐 AS Dinner FROM 表1

Union Select ID, 午餐 AS Dinner FROM 表1

Union Select ID, 晚餐 AS Dinner FROM 表1

Union Select ID, 夜宵 AS Dinner FROM 表1

通过上述查询合并后得到的查询结果,已经可以进行任意方式的统计了。

3、VBA代码方式统计

通过DAO或ADO遍历每一条记录,手工进行统计。适用于字段数极多的时候。

Public Function MCount(FieldFrom As Integer, Field To As Integer, FieldValue As Variant) As Long

    Dim intFieldID As Integer

    Dim adoRs As New ADODB.Recordset

    adoRs.Open "SELECT * FROM 表1", CurrentProject.Connection

    Do Until adoRs.EOF

        For intFieldID=FieldFrom To FieldTo

            If adoRs.Fields(intFieldID)=FieldValue Then MCount=MCount+1

        Next intFieldID

        adoRs.MoveNext

    Loop

End Function

[此贴子已经被作者于2005-10-27 18:22:52编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2005-10-28 15:38:00 | 只看该作者
学习。。。
3#
发表于 2005-10-28 20:47:00 | 只看该作者
请问总版主,上面的VBA代码怎么用啊?因为我是新手,请多赐教,谢谢!
4#
发表于 2005-10-29 00:58:00 | 只看该作者
学习
5#
发表于 2007-1-26 01:51:00 | 只看该作者
多字段怎么转换成一列
6#
发表于 2010-3-15 16:08:20 | 只看该作者
学习学习。好法子
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-9-21 09:14 , Processed in 0.097696 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表