Office中国论坛/Access中国论坛

标题: 如何实现查询结果的逐项累加?Henry D. Sy,ACMAIN_CHM 两位高手已解决! [打印本页]

作者: mybreeze    时间: 2009-2-24 23:24
标题: 如何实现查询结果的逐项累加?Henry D. Sy,ACMAIN_CHM 两位高手已解决!
本帖最后由 mybreeze 于 2009-2-25 23:14 编辑

小弟目前在工作中遇到一个难题,上来请教各位高手们帮我解惑!

有这么一张表
序号不合格项目数量
1外观45
2功能63
3功能25
4外观34
5外观7
6外观6
7安全58
8功能5
9安全76
10功能8
11轻微1


经过分类查询之后,结果如下:
不合格项目quantityratio
安全13440.85%
功能10130.79%
外观9228.05%
轻微10.30%


但是我的老板提出了一个很变态的要求,即要求对分类的结果要求能够自动逐项累加。老板要求的自动查询结果如下:
不合格项目quantityadd upratio
安全13413440.85%
功能10123571.64%
外观9232799.70%
轻微1328100%


我实在是没有办法实现上面这个结果,请教各位大大啦!
[attach]35857[/attach]
[attach]35857[/attach]
作者: Henry D. Sy    时间: 2009-2-24 23:56
累加的顺序固定吗
作者: mybreeze    时间: 2009-2-25 00:03
本帖最后由 mybreeze 于 2009-2-25 00:10 编辑
累加的顺序固定吗
Henry D. Sy 发表于 2009-2-24 23:56


先是按照分类查询结果的数量从大到小排序,然后开始逐项累加
也就是说从数量最多的项开始累加

版主都出马了,好期待!
作者: ly    时间: 2009-2-25 00:10
1# mybreeze


我觉得,access可以做到你的功能。但是从实际工作中,不同的不合格项目的数量相加是没有意义的,更不要说把比率也相加了。如果是金额倒是可以相加的。这可是题外话了。
作者: mybreeze    时间: 2009-2-25 00:17
本帖最后由 mybreeze 于 2009-2-25 00:20 编辑
1# mybreeze  


我觉得,access可以做到你的功能。但是从实际工作中,不同的不合格项目的数量相加是没有意义的,更不要说把比率也相加了。如果是金额倒是可以相加的。这可是题外话了。
ly 发表于 2009-2-25 00:10


是这样的,我是从事质保工作的,在我们的质量工具里面有一个柏拉图的概念,即做图找出占80%的重大影响因素,余下的占缺陷20%的次要因素可以暂不解决,重点解决影响质量问题的主要因素

所以才需要用到累加百分比来说明问题,占不良原因前80%的问题我们都是要立项解决的
作者: Henry D. Sy    时间: 2009-2-25 00:18
  1. Public Function gSum(Qty As Long) As Long
  2.     Dim rs As New ADODB.Recordset
  3.     Dim strSQL As String
  4.     Dim tempQty As Long
  5.     strSQL = "select quantity from f where quantity>=" & Qty & " order by quantity "
  6.     rs.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
  7.     Do While Not rs.EOF
  8.         tempQty = tempQty + rs.Fields(0)
  9.         rs.MoveNext
  10.     Loop
  11.     gSum = tempQty
  12.     rs.Close
  13.     Set rs = Nothing
  14. End Function
复制代码

  1. SELECT F.不合格项目, F.quantity, gSum([quantity]) AS AddUP
  2. FROM F;
复制代码

作者: mybreeze    时间: 2009-2-25 00:26
感谢斑竹这么快就给出了解决方案!受教了!
作者: chenwm1973    时间: 2009-2-25 08:46
受教了!
作者: ACMAIN_CHM    时间: 2009-2-25 08:48
如果能够直接用SQL来实现,在效率差不多的情况下一般是应该选择由SQL查询来完成。

select a.不合格项目,a.qty,sum(b.qty) as addup,sum(b.qty)/c.qty as ratio
from (select 不合格项目,sum(数量) as qty from sheet1 group by 不合格项目) a
   inner join (select 不合格项目,sum(数量) as qty from sheet1 group by 不合格项目) b
   on (a.qty<b.qty or (a.qty=b.qty and a.不合格项目<=b.不合格项目))
,(select sum(数量) as qty from sheet1) c
group by a.不合格项目,a.qty,c.qty
order by a.qty desc






******************
*  一切皆有可能  *
******************

.
ACMAIN - Access论坛回贴准则(个人).
.

.
QQ群 48866293 / 12035577 / 7440532 / 13666209
http://forum.csdn.net/BList/OtherDatabase .
http://www.accessbbs.cn/bbs/index.php .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
http://www.office-cn.net .
.
http://www.office-cn.net/home/space.php?uid=141646 .
作者: ly    时间: 2009-2-25 08:52
是这样的,我是从事质保工作的,在我们的质量工具里面有一个柏拉图的概念,即做图找出占80%的重大影响因素,余下的占缺陷20%的次要因素可以暂不解决,重点解决影响质量问题的主要因素

所以才需要用到累加百分 ...
mybreeze 发表于 2009-2-25 00:17


学习了,看来本人知识面太狭窄了!
作者: asklove    时间: 2009-2-25 11:03
例子收藏先
作者: mybreeze    时间: 2009-2-25 23:10
如果能够直接用SQL来实现,在效率差不多的情况下一般是应该选择由SQL查询来完成。

select a.不合格项目,a.qty,sum(b.qty) as addup,sum(b.qty)/c.qty as ratio
from (select 不合格项目,sum(数量) as qty from s ...
ACMAIN_CHM 发表于 2009-2-25 08:48



这位大大的查询写的真是牛!可是我理解能力有限,没有看懂那句inner join

查询a和查询b都定义成一样的,然后on后面的条件竟然让查询b变成了我要的逐项累加,实在是不可思议!

大大能帮我解一下惑么?有了解答但是看不懂可真难受!




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