Access交流中心

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

两个表数据分类汇总查询

zhf_2003  发表于:2016-04-07 20:15:16  
复制

有两个表,A表是省级单位表,B表是各下级单位人数,有隶属关系的单位前几位字符一样,如湖北014042,武汉01404201,汉口0140420101,如何用查询汇总各省人数。望大侠告知思路方法。

 

Top
zhf_2003 发表于:2016-04-07 20:49:05
进一步,如何按单位编码顺序依次汇总出各级人数。

朱先生 发表于:2016-04-07 21:54:48

最好上传附件,不能盲人摸象

湖北014042       拆分成湖北,   014042

武汉01404201    拆分成武汉,  014042

汉口0140420101 拆分成汉口, 014042

以014042 分类汇总

前8位是不是统一格式???如果格式是统一的,用 MID(字段名,1,2)分出湖北、武汉、汉口...........,MID(字段名,3,6)分成014042 

 

 



zhf_2003 发表于:2016-04-07 22:38:43

表一:rsb   各级单位人数

单位编码 单位名称 人数
014042 湖北 1
01404201 武汉 1
0140420101 汉口 1
014042010101 江岸区 1
01404202 荆州 1
0140420201 沙市区 1
表二:rshzb  省地人数汇总表

单位编码 单位名称 总人数
014042 湖北
01404201 武汉
01404202 荆州
01404203 宜昌
用一个UPDATE查询,把省地两级人员汇总数写入到汇总表中,即湖北包含所有人总数,武汉为包括武汉及下级所有单位人数之和



zhf_2003 发表于:2016-04-07 22:51:59
SELECT Left(rsb.单位编码,8) AS dw, Sum(rsb.人数) AS zrs

FROM rsb

GROUP BY Left(rsb.单位编码,8);

可以得到查询结果,可是UPDATE更新语句

UPDATE  rshzb,  SELECT Left(rsb.单位编码,8) AS DWBM, Sum(rsb.人数) AS zrs

FROM rsb

GROUP BY Left(rsb.单位编码,8) AS T 

SET rshzb.总人数=T.zrs

WHERE rshzb.单位编码=T.DW;

总是不行,不知道错在哪里




朱先生 发表于:2016-04-08 00:48:38

 生成表查询

SELECT Left(rsb.单位编码,8) AS dw, Sum(rsb.人数) AS zrs INTO T
FROM rsb
GROUP BY Left(rsb.单位编码,8);

 更新查询

UPDATE RSHZB INNER JOIN T ON RSHZB.单位编码 = T.dw SET RSHZB.总人数 = T.ZRS;

 

更新只能对表进行,所以先要生成表

看到有提示    操作必须使用一个可更新查询  了吗?

你的代码不会是硬写的吧

 



zhf_2003 发表于:2016-04-08 01:15:12

你的方法可以,但这样为啥不行:

UPDATE RSHZB INNER JOIN (SELECT Left(rsb.单位编码,8) AS dw, Sum(rsb.人数) AS zrs 
FROM rsb GROUP BY Left(rsb.单位编码,8)) as T ON RSHZB.单位编码 = T.dw SET RSHZB.总人数 = T.ZRS;

表一:rsb 表二:rshzb 本身都是实体表,中间还要生成一个实体表。因为表本来就很多,各类汇总数据也多,我希望能得到一个中间不生成实体表来更新汇总表的方法。

我的代码是下面的变形。

UPDATE a, b SET a.a1 = b.b1 WHERE a.id=b.id;



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