Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何统计某字段当行内容在该字段中出现的次数以及第几次出现

wgx711  发表于:2016-06-06 18:04:17  
复制

假设有2个字段,第1个字段是时间,第2个字段是ID,如下表

时间    ID

2016/1/1    A01

2016/1/2    A01

2016/1/3    A02

2016/2/3    A01

......    .......

我需要生成1个查询,知道某个ID在某1个月出现的次数以及该行数据从先后顺序来说是第几次出现,比如下表的第3列和第4列

时间    ID            出现次数        第几次

2016/1/1    A01        2                    1

2016/1/2    A01        2                    2

2016/1/3    A02        1                    1

2016/2/3    A01        1                    1

......    .......            ......                ......

 

第一次提问,还不清楚规则,不知道这样的描述是否准确。谢谢高手解答。

 

 

Top
煮江品茶 发表于:2016-06-07 09:54:39
方法1:
1、先写一个名曰查询1的查询
select a.*,format(a.时间,"yyyy/mm") as 月度
from 阁下的表名称 as a
2、在此基础上写查询2
select a.*,dcount("*","查询1","月度 & ID='" & a.月度 & a.ID & "'") as 出现次数,dcount("*","查询1","月度 & ID='" & a.月度 & a.ID & "' and 时间<=" & a.时间) as 第几次
from 查询1 as a


方法2:
select a.*,format(a.时间,"yyyy/mm") as 月度,dcount("*","阁下的表名称","format(时间,'yyyy/mm') & ID='" & format(a.时间,'yyyy/mm') & a.ID & "'") as 出现次数,dcount("*","阁下的表名称","format(时间,'yyyy/mm') & ID='" & format(a.时间,'yyyy/mm') & a.ID & "' and 时间<=" & a.时间) as 第几次
from 阁下的表名称 as a


方法3:
select a.*,format(a.时间,"yyyy/mm") as 月度,
(select count(*) from 阁下的表名称 as b where year(b.时间)=year(a.时间) and month(a.时间)=month(b.时间) and b.ID=a.ID)  as 出现次数,
(select count(*) from 阁下的表名称 as b where year(b.时间)=year(a.时间) and month(a.时间)=month(b.时间) and b.ID=a.ID and b.时间<=a.时间)  as 第几次
from 阁下的表名称 as a


更详细的处理方法可参见《趣谈子查询》一文。



wgx711 发表于:2016-06-08 11:58:53
�������ش˸���

非常感谢,代码好多,我要好好品下。我正在看@煮江品茶的趣谈子查询文章,确实,在excel里面,如果要针对记录与记录之间的关系来新增字段,比如:

1个记录在当列出现几次excel可以用countif(...)

1个记录在其他列满足某条件下,当列出现几次,excel可以用countifs(.....)

1个重复出现的记录从时间上面,给它标示先后顺序(excel中,假设ID在A列,时间在B列,要将顺序标示在C列,将B列升序,再A列升序,C2写上1,C3往下开始的公式:if(a3=a2,c2+1,1)),这样就能针对有重复记录的ID从时间先后顺序上标示1、2、.....。

某列是ID,要求给重复记录编号,一样的记录编号一致,在excel中,假设这列在A列,编号写在B列,将A列升序,B2=1,B3开始的单元格,公式:if(a3=a2,b2,b2+1)

以上这些,都是在excel中,针对记录与记录之间的关系,很轻松就能做一些统计。

但access中,真的还不清楚怎么做,我好好学习下先。

 

按照楼上的方法,目前来看,方法3OK。1和2似乎单双引号,计算的结果是0呢,麻烦帮忙看看,谢谢。




总记录:2篇  页次:1/1 9 1 :