Foxtable(狐表)用户栏目专家坐堂 → 统计


  共有2900人关注过本帖树形打印复制链接

主题:统计

帅哥哟,离线,有人找我吗?
刘林
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
统计  发帖心情 Post By: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用进一法得小来实现自动计算应征订试卷的大小袋,想法有,写不出来,请帮指导,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2017/2/20 20:56: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
老师,每个学生有个班级,这样统计出来的结果班数与人数一样多了,而实际是要统计出一个校同一个年级中不重复的班级数,这样才是班数,就是懂不起这里该怎样表达

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By: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

1、老师,每个学生有个班级,这样统计出来的结果班数与人数一样多了,而实际是要统计出一个校同一个年级中不重复的班级数,这样才是班数,就是懂不起这里该怎样表达
2、g.filter中cint个应换成什么

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By: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

实现了,但我觉得要用红色部分来算出各校同年级的班数,目标到是实现了,但这个方法是不是效率低了,有什么更好的办法




 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/2/21 10:41:00 [只看该作者]


效率确实不高


上例子,给你改改sql

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2017/2/21 10:59:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目7.foxdb


请老师指导,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1953 积分:15015 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2017/2/21 11:47:00 [只看该作者]

老师,排除的所级是动态的,要根据窗口中的combobox1.的内容来改变,也就是说每期要排除的学生年级不一样

 回到顶部
总数 23 1 2 3 下一页