以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 统计 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=96435) |
||||
-- 作者:刘林 -- 发布时间:2017/2/20 20:34:00 -- 统计 Dim g As New sqlGroupTableBuilder("统计表1","学生信息") Dim dt1 As Table = Tables("试卷征订数_table1") g.C g.Groups.AddDef("学校名称") g.Groups.AddDef("年级") g.Totals.AddDef("学生姓名",AggregateEnum.Count,"人数") dt1.DataSource = g.BuildDataSource() dt1.DataTable.DataCols.Add("班数",Gettype(Double)) dt1.DataTable.DataCols.Add("试卷数",Gettype(Double)) dt1.DataTable.DataCols.Add("大",Gettype(Double)) dt1.DataTable.DataCols.Add("小",Gettype(Double)) 老师,请问上面代码想统计出一个学校各年级总人数,因为学生信息中还有班级字段,想在统计表1中增加一列来统计各年级有几个班该怎样加代码,另外我想用人数+班级数量*2得到应订试卷数,大是试卷大袋,小是试卷小袋,用试卷数/30取商得大,余数/5用进一法得小来实现自动计算应征订试卷的大小袋,想法有,写不出来,请帮指导,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2017/2/20 20:49:00 -- Dim g As New sqlGroupTableBuilder("统计表1","学生信息") Dim dt1 As Table = Tables("试卷征订数_table1") g.C g.Groups.AddDef("学校名称") g.Groups.AddDef("年级") g.Totals.AddDef("学生姓名",AggregateEnum.Count,"人数") g.Totals.AddDef("班级",AggregateEnum.Count,"班数") dt1.DataSource = g.BuildDataSource() dt1.DataTable.DataCols.Add("试卷数",Gettype(Double),"人数 + 班数 * 2") dt1.DataTable.DataCols.Add("大",Gettype(Double)) dt1.DataTable.DataCols.Add("小",Gettype(Double)) For Each r As Row In dt1.Rows r("大") = Math.Floor(r("试卷数")/30) r("小") = Math.Ceiling((r("试卷数") Mod 30)/ 5) Next |
||||
-- 作者:刘林 -- 发布时间:2017/2/20 20:56:00 --
|
||||
-- 作者:刘林 -- 发布时间:2017/2/20 21:50:00 -- Dim cm1 As String = e.Form.Controls("combobox1").text Dim year As Integer = cm1.Substring(0,4) Dim ji As String = cm1.Substring(4,1) Dim j As Integer If ji = "春" j = 0 End If If ji = "秋" j = 1 End If year = year + j messagebox.show(year) Dim g As New sqlGroupTableBuilder("统计表1","学生信息") Dim dt1 As Table = Tables("试卷征订数_table1") g.C g.Filter = "left(状态,2) = \'在读\'and year-cint(substring(年级,2,4))<=6" g.Groups.AddDef("学校名称") g.Groups.AddDef("年级") g.Totals.AddDef("学生姓名",AggregateEnum.Count,"人数") g.Totals.AddDef("班级",AggregateEnum.Count,"班数") dt1.DataSource = g.BuildDataSource() dt1.DataTable.DataCols.Add("试卷数",Gettype(Double),"人数 + 班数 * 2") dt1.DataTable.DataCols.Add("大",Gettype(Double)) dt1.DataTable.DataCols.Add("小",Gettype(Double)) For Each r As Row In dt1.Rows r("大") = Math.Floor(r("试卷数")/30) r("小") = Math.Ceiling((r("试卷数") Mod 30)/ 5) Next
|
||||
-- 作者:有点蓝 -- 发布时间:2017/2/20 22:05:00 -- 用sql统计吧,自己到数据库测试,自己改改 Dim dt1 As Table = Tables("试卷征订数_table1") Dim sql = "select a1.*,b.班数,(人数 + 班数 * 2) as 试卷数,floor(试卷数/30) as 大,Ceiling((试卷数 % 30)/5) from (Select 学校名称,年级,Count(学生姓名) As 人数 from 学生信息 group by 学校名称,年级) as a1 Inner join" sql &= "(Select 学校名称,年级,Count(班级) As 班数 from (Select distinct 学校名称,年级,班级 from 学生信息) As a group by a.学校名称,a.年级) As b on a1.学校名称 = b.学校名称 And a1.年级 = b.年级 " Dim cmd As new SQLCommand cmd.ConnectionName = "数据源" cmd.CommandText = sql dt1.DataSource= cmd.ExecuteReader |
||||
-- 作者:刘林 -- 发布时间:2017/2/21 9:29:00 -- 老师上面的sql懂不起,为了实现想法,我改成了如下 Dim g As New sqlGroupTableBuilder("统计表1","学生信息") Dim dt1 As Table = Tables("试卷征订数_table1") g.C g.Filter = "left(状态,2) = \'在读\'" g.Groups.AddDef("学校名称") g.Groups.AddDef("年级") g.Totals.AddDef("学生姓名",AggregateEnum.Count,"人数") dt1.DataSource = g.BuildDataSource() dt1.DataTable.DataCols.Add("班数",Gettype(Double)) For Each r1 As Row In dt1.Rows Dim bs As List(Of String) bs = DataTables("学生信息").sqlGetValues("班级","年级 = \'" & r1("年级") &"\' And 学校名称 = \'" & r1("学校名称") &"\'") r1("班数") = bs.count Next dt1.DataTable.DataCols.Add("试卷数",Gettype(Double),"人数 + 班数 * 2") dt1.DataTable.DataCols.Add("大",Gettype(Double)) dt1.DataTable.DataCols.Add("小",Gettype(Double)) For Each r As Row In dt1.Rows r("大") = Math.Floor(r("试卷数")/30) r("小") = Math.Ceiling((r("试卷数") Mod 30)/ 5) Next 实现了,但我觉得要用红色部分来算出各校同年级的班数,目标到是实现了,但这个方法是不是效率低了,有什么更好的办法 |
||||
-- 作者:有点蓝 -- 发布时间:2017/2/21 10:41:00 -- 效率确实不高 |
||||
-- 作者:刘林 -- 发布时间:2017/2/21 10:59:00 --
请老师指导,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2017/2/21 11:24:00 -- Dim nj As String = "\'初中2014级\',\'小学2011级\'" \'排除的年级 Dim sql As String = " Select *,floor(试卷数/30) As 大,Ceiling((试卷数 % 30)/5) As 小 from (Select a1.*,b.班数,(人数 + 班数 * 2) As 试卷数 from " sql += " (Select 学校名称,年级,Count(学生姓名) As 人数 from 学生信息 where 年级 not in(" & nj & ") group by 学校名称,年级) As a1 Inner join " sql += " (Select 学校名称,年级,Count(班级) As 班数 from (Select distinct 学校名称,年级,班级 from 学生信息 where 年级 not in(" & nj & ")) As a group by a.学校名称,a.年级) As b " sql += " on a1.学校名称 = b.学校名称 And a1.年级 = b.年级) As c" Dim cmd As new SQLCommand cmd.ConnectionName = "180.183.105.50" cmd.CommandText = sql Dim dt1 As Table = e.Form.Controls("Table1").Table dt1.DataSource= cmd.ExecuteReader
|
||||
-- 作者:刘林 -- 发布时间:2017/2/21 11:47:00 -- 老师,排除的所级是动态的,要根据窗口中的combobox1.的内容来改变,也就是说每期要排除的学生年级不一样 |