Office中国论坛/Access中国论坛

标题: 求助 SQL求和问题 [打印本页]

作者: 鱼儿游游    时间: 2011-9-29 13:43
标题: 求助 SQL求和问题
本帖最后由 鱼儿游游 于 2011-9-30 13:42 编辑

A表  有A1、A2 字段
B表  有B1、B2 、B3(数值) 字段

A表的A1字段与B表的B1有同样的值,可建立关联。

如何实现:把A表的A2字段和B表B2字段分组记录,对应的B表B3字段求和?


要求:按乡镇、税种分组,查询税额的合计

整理了一下,问题在24楼:http://www.office-cn.net/thread-105762-3-1.html

作者: Henry D. Sy    时间: 2011-9-29 13:50
把例子传上来
作者: tzh16000    时间: 2011-9-29 13:53
试试
select b.b1,b.b2,sum(b3) as "求和" from a,b on (b.b1=a.a1 and b.b2=a.a2) group by b.b1,b.b2

作者: 鱼儿游游    时间: 2011-9-29 14:06
本帖最后由 鱼儿游游 于 2011-9-29 14:09 编辑

试了,不行。A2 <> B2 的
作者: tzh16000    时间: 2011-9-29 14:20
select b.b1,a.a2,b.b2,sum(b3) as "求和" from a,b on b.b1=a.a1 group by b.b1,a.a2,b.b2

作者: 鱼儿游游    时间: 2011-9-29 14:27
已 上传数据表
作者: 鱼儿游游    时间: 2011-9-29 14:38
我试试
作者: tzh16000    时间: 2011-9-29 14:41
你这是要两个查询吧
SELECT A表.所在乡镇名, Sum(B表.金额) AS 金额之总计
FROM A表 LEFT JOIN B表 ON A表.编号 = B表.编号
GROUP BY A表.所在乡镇名;

SELECT A表.行业, Sum(B表.金额) AS 金额之总计
FROM A表 LEFT JOIN B表 ON A表.编号 = B表.编号
GROUP BY A表.行业;

作者: tzh16000    时间: 2011-9-29 14:46
是这样么?
作者: 鱼儿游游    时间: 2011-9-29 14:52
本帖最后由 鱼儿游游 于 2011-9-29 14:52 编辑

多谢楼上的,但不是我要的结果
作者: 鱼儿游游    时间: 2011-9-29 14:52
我要一个查询,不要分开的
作者: tzh16000    时间: 2011-9-29 15:00
老兄,你的要求在不断变化啊,刚才还是工业现在是税种了

作者: 鱼儿游游    时间: 2011-9-29 15:17
已解决,多谢各位。
SELECT A表.所在乡镇名, B表.税种, Sum(B表.金额) AS 金额之总计
FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
GROUP BY B表.税种, A表.所在乡镇名;

作者: Henry D. Sy    时间: 2011-9-29 15:17
  1. SELECT A表.所在乡镇名, B表.税种, Sum(B表.金额) AS 金额之总计
  2. FROM A表 RIGHT JOIN B表 ON A表.识别号 = B表.识别号
  3. GROUP BY A表.所在乡镇名, B表.税种
复制代码

作者: 鱼儿游游    时间: 2011-9-29 15:22
多谢版主!
作者: 鱼儿游游    时间: 2011-9-29 15:24
本帖最后由 鱼儿游游 于 2011-9-29 15:25 编辑

能不能输出以下的的结果呢(查询条件是:年、月)?
把上面的金额列改为:

作者: Henry D. Sy    时间: 2011-9-29 15:29
用交叉查询试试!
作者: tzh16000    时间: 2011-9-29 15:30
额,应该用识别号连接
作者: tzh16000    时间: 2011-9-29 16:55
笨办法,把需要的东西用查询一步步找出来
作者: 鱼儿游游    时间: 2011-9-29 19:48
能不能一句SQL完成?
作者: tzh16000    时间: 2011-9-30 09:17
本帖最后由 tzh16000 于 2011-9-30 09:17 编辑
鱼儿游游 发表于 2011-9-29 19:48
能不能一句SQL完成?


没试过,一直以来遇到复杂的查询我都是这么做的,要是把母查询的名称用语句代入,一层层嵌套进去应该可以吧,不过语句可能会很长...
作者: 鱼儿游游    时间: 2011-9-30 12:39
谢谢你,要是能一句SQL完成就就好了。
作者: todaynew    时间: 2011-9-30 12:48
不知道你要汇总到什么程度,不过可以以下查询进行分组查询:
SELECT B表.编号, B表.识别号, B表.交税日期, A表.企业名称, A表.所在乡镇名, A表.行业, B表.税种, B表.金额
FROM A表 INNER JOIN B表 ON A表.识别号 = B表.识别号;
作者: 鱼儿游游    时间: 2011-9-30 13:35
本帖最后由 鱼儿游游 于 2011-9-30 13:38 编辑
todaynew 发表于 2011-9-30 12:48
不知道你要汇总到什么程度,不过可以以下查询进行分组查询:
SELECT B表.编号, B表.识别号, B表.交税日期, ...


我的要求是这样的结果:

作者: tzh16000    时间: 2011-9-30 13:39
那用基础查询做报表吧
作者: 鱼儿游游    时间: 2011-9-30 13:40
本帖最后由 鱼儿游游 于 2011-9-30 13:46 编辑

楼上的朋友,能帮忙吗?
作者: tzh16000    时间: 2011-9-30 13:54
用报表可以做到这效果
用一句SQL,可能吗?
想想也知道,你那表格里还有各种的合计字段呢
如果一定要用查询,我能想到的,是查询出基础数据后建立个临时表,除了正常的分组合计数据外再分别插入按行业和按乡镇的合计记录,最后用临时表数据生成查询
作者: todaynew    时间: 2011-9-30 14:04
鱼儿游游 发表于 2011-9-30 13:35
我的要求是这样的结果:

不对吧?
与税种无关?
作者: 鱼儿游游    时间: 2011-9-30 14:08
todaynew 发表于 2011-9-30 14:04
不对吧?
与税种无关?

todaynew斑竹,能帮一下吗?
作者: todaynew    时间: 2011-9-30 14:45
本帖最后由 todaynew 于 2011-9-30 14:48 编辑
鱼儿游游 发表于 2011-9-30 14:08
todaynew斑竹,能帮一下吗?


就是在分组查询中使用域函数或子查询嘛:

1、先写一个查询1
SELECT B表.编号, B表.识别号, A表.企业名称 AS 企业, A表.所在乡镇名 AS 乡镇, A表.行业, Year([交税日期]) AS 年度, Month([交税日期]) AS 月度, B表.税种, B表.金额
FROM A表 INNER JOIN B表 ON A表.识别号 = B表.识别号;

2、以查询1为基础写分组查询,在分组查询中用域函数或子查询算累计、同期等字段
SELECT a.乡镇, a.行业, a.年度, a.月度, a.税种, Sum(a.金额) AS 本期, DSum("金额","查询1","乡镇='" & a.[乡镇] & "' and 行业='" & a.[行业] & "' and 税种='" & a.[税种] & "' and 年度=" & a.[年度] & " and 月度<=" & a.[月度]) AS 累计
FROM 查询1 as a
GROUP BY a.乡镇, a.行业, a.年度, a.月度, a.税种;

后面的几个字段比照累计字段的域函数写一下就可以了。
作者: 鱼儿游游    时间: 2011-10-1 21:53
本帖最后由 鱼儿游游 于 2011-10-2 00:51 编辑

多谢各位的热心帮助,我已解决了这个问题,实现了一句SQL完成。
作者: t小宝    时间: 2011-10-2 01:07
本帖最后由 t小宝 于 2011-10-2 01:11 编辑
鱼儿游游 发表于 2011-9-30 13:35
我的要求是这样的结果:
  1. PARAMETERS 年度 Short, 月份 Short;
  2. SELECT 本年本月合计.行业 AS 项目, 本年本月合计.金额之总计 AS 本年本月合计, 本年本月止累计.金额之总计 AS 本年本月止累计, 去年同期月合计.金额之总计 AS 去年同期月合计, 去年同期年累计.金额之总计 AS 去年同期年累计, nz([本年本月合计])-nz([去年同期月合计]) AS 月份对比_增减数,  Format([月份对比_增减数]/nz([本年本月合计]),"0.00%") AS [月份对比_增减%], nz([本年本月止累计])-nz([去年同期年累计]) AS 累计对比_增减数,  Format([累计对比_增减数]/nz([去年同期年累计]),"0.00%") AS [累计对比_增减%]
  3. FROM
  4. (SELECT A表.所在乡镇名, A表.行业, Sum(B表.金额) AS 金额之总计
  5. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  6. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))<=[月份]))
  7. GROUP BY A表.行业, A表.所在乡镇名
  8. UNION ALL SELECT A表.所在乡镇名, A表.所在乡镇名 & "合计", Sum(B表.金额) AS 金额之总计
  9. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  10. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))<=[月份]))
  11. GROUP BY A表.所在乡镇名
  12. UNION ALL SELECT A表.行业 & "合计", A表.行业 & "合计", Sum(B表.金额) AS 金额之总计
  13. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  14. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))<=[月份]))
  15. GROUP BY A表.行业
  16. UNION ALL SELECT "0总计", "总    计", Sum(B表.金额) AS 金额之总计
  17. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  18. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))<=[月份]))) AS 去年同期年累计
  19. RIGHT JOIN
  20. ((SELECT A表.所在乡镇名, A表.行业, Sum(B表.金额) AS 金额之总计
  21. FROM B表 LEFT JOIN A表 ON B表.识别号 = A表.识别号
  22. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))=[月份]))
  23. GROUP BY A表.所在乡镇名, A表.行业
  24. UNION ALL SELECT A表.所在乡镇名, A表.所在乡镇名 & "合计", Sum(B表.金额) AS 金额之总计
  25. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  26. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))=[月份]))
  27. GROUP BY A表.所在乡镇名
  28. UNION ALL SELECT A表.行业 & "合计", A表.行业 & "合计", Sum(B表.金额) AS 金额之总计
  29. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  30. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))=[月份]))
  31. GROUP BY A表.行业
  32. UNION ALL SELECT "0总计", "总    计", Sum(B表.金额) AS 金额之总计
  33. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  34. WHERE (((year([交税日期]))=[年度]-1) and ((Month([交税日期]))=[月份]))) AS 去年同期月合计
  35. RIGHT JOIN
  36. ((SELECT A表.所在乡镇名, A表.行业, Sum(B表.金额) AS 金额之总计
  37. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  38. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))<=[月份]))
  39. GROUP BY A表.行业, A表.所在乡镇名
  40. UNION ALL SELECT A表.所在乡镇名, A表.所在乡镇名 & "合计", Sum(B表.金额) AS 金额之总计
  41. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  42. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))<=[月份]))
  43. GROUP BY A表.所在乡镇名
  44. UNION ALL SELECT A表.行业 & "合计", A表.行业 & "合计", Sum(B表.金额) AS 金额之总计
  45. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  46. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))<=[月份]))
  47. GROUP BY A表.行业
  48. UNION ALL SELECT "0总计", "总    计", Sum(B表.金额) AS 金额之总计
  49. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  50. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))<=[月份]))) AS 本年本月止累计
  51. RIGHT JOIN
  52. ((SELECT A表.所在乡镇名, A表.行业, Sum(B表.金额) AS 金额之总计
  53. FROM B表 LEFT JOIN A表 ON B表.识别号 = A表.识别号
  54. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))=[月份]))
  55. GROUP BY A表.所在乡镇名, A表.行业
  56. UNION ALL SELECT A表.所在乡镇名, A表.所在乡镇名 & "合计", Sum(B表.金额) AS 金额之总计
  57. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  58. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))=[月份]))
  59. GROUP BY A表.所在乡镇名
  60. UNION ALL SELECT A表.行业 & "合计", A表.行业 & "合计", Sum(B表.金额) AS 金额之总计
  61. FROM B表 LEFT JOIN A表 ON B表.识别号=A表.识别号
  62. WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))=[月份]))
  63. GROUP BY A表.行业
  64. UNION ALL SELECT "0总计", "总    计", Sum(金额) AS 金额之总计
  65. FROM B表 WHERE (((year([交税日期]))=[年度]) and ((Month([交税日期]))=[月份]))) AS 本年本月合计
  66. RIGHT JOIN
  67. (SELECT 所在乡镇名, 行业 FROM A表 GROUP BY 所在乡镇名, 行业
  68. UNION ALL SELECT 所在乡镇名, 所在乡镇名 & "合计" FROM A表 GROUP BY 所在乡镇名
  69. UNION ALL SELECT 行业 & "合计", 行业 & "合计" FROM A表 GROUP BY 行业
  70. UNION ALL SELECT TOP 1 "0总计", "总    计" FROM A表 ) AS 名称
  71. ON
  72. (本年本月合计.行业 = 名称.行业) AND (本年本月合计.所在乡镇名 = 名称.所在乡镇名)) ON (本年本月止累计.行业 = 名称.行业) AND (本年本月止累计.所在乡镇名 = 名称.所在乡镇名)) ON (去年同期月合计.行业 = 名称.行业) AND (去年同期月合计.所在乡镇名 = 名称.所在乡镇名)) ON (去年同期年累计.行业 = 名称.行业) AND (去年同期年累计.所在乡镇名 = 名称.所在乡镇名)
  73. ORDER BY 名称.所在乡镇名;
复制代码

作者: 鱼儿游游    时间: 2011-10-2 09:46
本帖最后由 鱼儿游游 于 2011-10-2 09:56 编辑

{:soso_e179:} 多谢小宝斑竹,多谢了!
作者: lingjiang    时间: 2020-8-16 20:33
学习学习




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