Access交流中心

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

count()聚合函数如何统计同一列含某字段的个数

ouyh  发表于:2017-12-23 23:19:20  
复制

列如:

基础数据表

查询统计

求在查询中以交货单分组,分别统计库位中同时包含M个数.H个数?


SELECT 交货单 AS 交货单号, Count([库位]) AS M个数
FROM 基础数据
WHERE [库位]like'M*'
GROUP BY 交货单;

这段代码只能得出 M个数.


如何能统计查询中以交货单分组,分别统计库位中同时包含M个数.H个数?

请各位老师指教下

文件

点击下载此附件


 

Top
leoyoung 发表于:2017-12-24 09:37:52

去掉where 条件,可以查看全部的个数。


TRANSFORM Count(Left([库位],1)) as 计数
SELECT 基础数据.交货单 AS 交货单号
FROM 基础数据
WHERE Left([库位],1)="m" OR Left([库位],1)="h"
GROUP BY 基础数据.交货单
PIVOT Left([库位],1);



ouyh 发表于:2017-12-24 15:20:14

多谢 Leoyoung 指点,完全正确, 正是要如此结果


就是不太明白,怎么就用交叉查询就能得到结果!

不好理解,望有时间帮分拆一二?




yihui 发表于:2017-12-25 11:01:15
按照你取m的代码  直接修改

SELECT 交货单 AS 交货单号, Count([库位]) AS M个数
FROM 基础数据
WHERE [库位]like'M*' or  [库位]like'h*'
GROUP BY 交货单;

这个应该可以实现的吧



或者你如果要的是  先H个数 再M个数  再合计 那样就要子查询 或建中间表查询   例如:

建中间表查询

SELECT 基础数据.交货单, b.库位h计数, a.库位M计数, Nz([库位h计数],0)+Nz([库位m计数],0) AS 合计
FROM (基础数据 LEFT JOIN (SELECT 基础数据.交货单, Count(基础数据.库位) AS 库位h计数
FROM 基础数据
WHERE (((Left([库位],1))="h"))
GROUP BY 基础数据.交货单)  AS b ON 基础数据.交货单 = b.交货单) LEFT JOIN (SELECT 基础数据.交货单, Count(基础数据.库位) AS 库位M计数
FROM 基础数据
WHERE (((Left([库位],1))="m"))
GROUP BY 基础数据.交货单)  AS a ON 基础数据.交货单 = a.交货单
GROUP BY 基础数据.交货单, b.库位h计数, a.库位M计数, Nz([库位h计数],0)+Nz([库位m计数],0);



子查询方法:

SELECT a.交货单, (select count(b.库位) from 基础数据 as b where a.交货单 = b.交货单 and Left([b.库位],1)="h" GROUP BY b.交货单) AS 库位h计数,(select count(c.库位) from 基础数据 as c where a.交货单 = c.交货单 and Left([c.库位],1)="m" GROUP BY c.交货单) AS 库位m计数,nz(库位h计数)+NZ(库位M计数) as 合计
FROM 基础数据 as a
GROUP BY a.交货单



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