Office中国论坛/Access中国论坛

标题: 关于百分比查询 [打印本页]

作者: hgxly    时间: 2011-5-31 02:02
标题: 关于百分比查询
       想请教一个关于百分比查询的问题。

      以前在本网站上下载过一个关于百分比查询的附件(见上传附件),能解决诸如某学分占总学分的百分比问题,现在问题是碰到了只想对其中一部分数据(比如等级为A的数据)进行百分比统计,却搞不定了,虽然加了条件:等级=a,而实际的计算还是以全部的学分作为分母,也不知问题在哪里,望高手给予指教。

作者: roych    时间: 2011-5-31 02:18
把条件加到Dsum里面。由于对你的算法不清楚,所以不传附件了,这里给个SQL语句示例:
SELECT 表1.b, Format([b]/DSum("[b]","表1","等级='a'"),"Percent") AS 表达式1
FROM 表1
WHERE (表1.等级="a")
GROUP BY 表1.b;
作者: hgxly    时间: 2011-5-31 09:34
roych 发表于 2011-5-31 02:18
把条件加到Dsum里面。由于对你的算法不清楚,所以不传附件了,这里给个SQL语句示例:
SELECT 表1.b, Forma ...

有道理,谢谢。
作者: hgxly    时间: 2011-5-31 14:37
版主,我将你给的这个SQL语句放入查询绝对没问题,但我要在窗体中作为子窗体引用的源码,却出现了问题,或说SQL语句中缺这缺那的,或修改后出现如下提示:试图执行的查询中不包含作为合计函数一部分的特定表达式'Format([b]/DSum("[b]","表1","等级='a'),'Percent')'。

我知道问题出在DSun语句中,(抽掉这个条件就行)但吃不准是DSum函数不允许加入语句中,还是SQL语句写的时候语法上有问题?在以往的编程中也有此类问题出现,但语句中又有双引号又有单引号该怎样处理真是头遭碰到。版主能否再作赐教,先谢了。

仍附附件。

作者: ly    时间: 2011-5-31 16:38
不知我的理解是否符合楼主的要求?
sqlf = "SELECT 表1.b, Format(/DSum('','表1'),'Percent') AS 表达式1, 表1.等级 FROM 表1 GROUP BY 表1.b, 表1.等级 HAVING (表1.等级='" & aa & "')"
作者: roych    时间: 2011-5-31 16:59
本帖最后由 roych 于 2011-6-1 01:49 编辑

把这一句放在窗体的记录源里:
SELECT 表1.b, Format(/DSum("","表1","等级='a'"),"Percent") AS 表达式1 FROM 表1 WHERE (表1.等级)="a" GROUP BY 表1.b;
如果用代码的话,可以这样改:
Private Sub Form_Load()
mysum = DSum("b", "表1", "等级='a'")
strtext = "SELECT b, b/" & mysum & " AS 表达式1 FROM 表1 WHERE 等级='a' GROUP BY 表1.b"
Debug.Print strtext
Me.Form.RecordSource = strtext
End Sub
接着把里面的文本框改为百分比格式就好了。
一般来说,对于过于复杂的表达式,建议不必一步到位地写出来,很容易因为这个而降低代码的可读性。所以,我们就先把Dsum分出来,然后再嵌入表达式里面。而设置文本框格式则消除了Format函数。这样一来,代码就简单多了。
[attach]45750[/attach]
作者: hgxly    时间: 2011-5-31 21:54
ly 的方法试了,还是出现“操作符丢失的错误。”的提示。我慢慢再研究研究,先谢了。

版主的将其中的DSum函数化作变量,再组装到sql语句中的办法很好,我虽考虑过,但就是没写出你上面的句子,这就是水平上的差异吧,呵呵。多谢多谢。




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