以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  统计问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=2158)

--  作者:abcdzabcdz
--  发布时间:2009/3/20 9:42:00
--  统计问题
统计问题 


说明:

1、以“语文”成绩为例,将语文优生(简称“语优”)分为四类(即A、B1、B2、C),现欲分班级统计“语优”中“A”优有多少人、“B1”优有多少人、“B2”优有多少人、“C”优有多少人;数学、英语、总分依次类推。

2、物理/政治的“A优”为“物优”与“政优”中“A”优数之和,其它类推。  

3、最后一行,将统计情况汇总。

4、若同时能用“手工编码”和DataColChanged事件编程等方式一题多解为最好,方便学习。

外:“优生统计”表中为根据“成绩及优生划分”表统计出的正确数据,供参考。

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:统计问题.table


--  作者:czy
--  发布时间:2009/3/20 10:14:00
--  

举例好象不恰当,因为表中没有语文数据。

Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩及优生划分")
If e.DataCol.Name = "班级" And e.DataRow.IsNull("班级") = False Then
    dr("总分_A优") = dt.Compute("Count(姓名)", "[总优] = \'A\' And [班级] = \'" & dr("班级") & "\'" )
    dr("总分_B1优") = dt.Compute("Count(姓名)", "[总优] = \'B1\' And [班级] = \'" & dr("班级") & "\'" )
    dr("总分_B2优") = dt.Compute("Count(姓名)", "[总优] = \'B2\' And [班级] = \'" & dr("班级") & "\'" )
    dr("总分_C优") = dt.Compute("Count(姓名)", "[总优] = \'C\' And [班级] = \'" & dr("班级") & "\'" )
End If

[此贴子已经被作者于2009-3-20 10:27:58编辑过]

--  作者:czy
--  发布时间:2009/3/20 10:16:00
--  
只做了个总分优,其它自己参照做吧.

最后行你应该用汇总模式。
--  作者:abcdzabcdz
--  发布时间:2009/3/20 11:59:00
--  
谢谢!
--  作者:abcdzabcdz
--  发布时间:2009/3/22 19:50:00
--  
 

对2楼语句深入思考:

思考1、计算“总分”中“A”优与“B1”优人数之和(假设计存在“总分_AB1优”):

dr("总分_AB1优") = dt.Compute("Count(姓名)", "[总优] = \'B1\' And [班级] = \'" & dr("班级") & "\' Or [总优] = \'A\' And [班级] = \'" & dr("班级") & "\'" )

计算“A”、“B1”、“B2”优人数之和:

dr("总分_AB1B2优") = dt.Compute("Count(姓名)", "[总优] = \'B1\' And [班级] = \'" & dr("班级") & "\' Or [总优] = \'B1\' And [班级] = \'" & dr("班级") & "\' Or [总优] = \'A\' And [班级] = \'" & dr("班级") & "\'" )

思考2、高中分文理科,统计成绩时常把“物理与政治”科数据放在一起统计(理科无政治学科,文科无物理学科),假设计有一列“物理/政治_A优”,我将上述语句修改为:

dr("物理/政治_A优") = dt.Compute("Count(姓名)", "[物优] = \'A\' And [班级] = \'" & dr("班级") & "\' Or [政优] = \'A\' And [班级] = \'" & dr("班级") & "\'" )

两种思维方式一致,结果大相径庭(思考1测试数据正确,思考2测试数据错误),真让人想不通????问题到底出在哪里呢????


--  作者:czy
--  发布时间:2009/3/22 19:56:00
--  
道理非常简单,再思考下第二个语句为什么不行,相信你应该很快就能明白的。
--  作者:abcdzabcdz
--  发布时间:2009/3/22 20:04:00
--  

还是不太明白?是不是[物优]在前已提前定位?

怎样修改第二个语句才能达到预期目的?


--  作者:czy
--  发布时间:2009/3/22 20:49:00
--  
Dim dr As DataRow = e.DataRow
Dim dt As DataTable =DataTables("成绩及优生划分")
Dim Str As String = "And [班级] = \'" & dr("班级") & "\'"
If e.DataCol.Name = "班级" And e.DataRow.IsNull("班级") = False Then
    dr("物理/政治_A优") = dt.Compute("Count(姓名)", "[物优] = \'A\'" & Str) + dt.Compute("Count(姓名)", "[政优] = \'A\'" & Str)
End If