Foxtable(狐表)用户栏目专家坐堂 → [求助]计算汇总成绩的代码


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

主题:[求助]计算汇总成绩的代码

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/16 11:34:00 [显示全部帖子]

图片点击可在新窗口打开查看  图片点击可在新窗口打开查看 一做下去,就没完没了了......

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/16 11:34:00 [显示全部帖子]

按钮代码

 

Dim cnames As String = ""
Dim enames As String = ""
Dim onames As String = "准考号, 班级, 座号, 姓名,"
Dim dic As new Dictionary(Of String, String)
For Each dr As DataRow In DataTables("计算公式").Select("考试名称 is not null")
    Dim Total As String = ""
    For Each ary As String In dr("科目").split(",")
        If ary <> "总分" Then
            cnames &= "(Select top 1 " & ary & " from {学生成绩库} b where b.准考号 = a.准考号 And b.考试名称 = '" & dr("考试名称") & "') as [" & dr("考试名称") & "_" &  ary & "],"
            Total &= "isnull([" & dr("考试名称") & "_" &  ary & "], 0)+"
            onames &= "[" & dr("考试名称") & "_" &  ary & "],"
            If dic.ContainsKey(ary) = False Then
                dic.Add(ary, "isnull([" & dr("考试名称") & "_" &  ary & "],0) * " & dr("权重") & "+")
            Else
                dic(ary) = dic(ary) & "isnull([" & dr("考试名称") & "_" &  ary & "],0) * " & dr("权重") & "+"
            End If
        End If
    Next
    If dr("科目").contains("总分") Then
        onames &= Total.TrimEnd("+") & " as [" & dr("考试名称") & "_总分],"
    End If
    enames &= "'" & dr("考试名称") & "',"
Next

Dim zfname As String = ""
For Each k As String In dic.Keys
    onames &= dic(k).TrimEnd("+") & " As 成绩汇总_" & k & ","
    zfname &= dic(k)
Next
onames &= zfname.TrimEnd("+") & " as 成绩汇总_总分"

Dim sql As String = "select " & onames.TrimEnd(",") & "  from (Select 准考号, 班级, 座号, 姓名, " & cnames.TrimEnd(",") & " from {学生成绩库} a where 考试名称 In (" & enames.TrimEnd(",") & ") group by 准考号, 班级, 座号, 姓名) As c"
output.show(sql)

Dim q As new QueryBuilder
q.ConnectionName = "学生成绩库"
q.TableName = "成绩汇总"
q.SelectString = sql
q.Build
MainTable = Tables("成绩汇总")

[此贴子已经被作者于2014-5-16 11:35:04编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 9:44:00 [显示全部帖子]

不理解你的意思,如果座位号是变化的,就不要把座位号加上去,直接用 准考号, 班级, 姓名 即可。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 11:27:00 [显示全部帖子]

 回复14楼,是的,按照 准考证和姓名 去统计即可。

 

 统计出来的数据,再具体分析。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 12:13:00 [显示全部帖子]

 回复16楼,仍在读学生单独测试吧。直接获取最后一次参加了考试的学生即可。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 15:05:00 [显示全部帖子]

以下是引用方丈在2014-5-29 14:27:00的发言:
没头绪

 

代码这样写,看是否符合。计算的是所有学生的成绩,你按需筛选对应的学生即可。

 

Dim cnames As String = ""
Dim enames As String = ""
Dim onames As String = "准考号, 姓名, (select top 1 班级 from {学生成绩库} d where c.准考号 = d.准考号 order by 班级 desc) as 班级, (select top 1 座号 from {学生成绩库} d where c.准考号 = d.准考号 order by 班级 desc) as 座号,"
Dim dic As new Dictionary(Of String, String)
For Each dr As DataRow In DataTables("计算公式").Select("考试名称 is not null")
    Dim Total As String = ""
    For Each ary As String In dr("科目").split(",")
        If ary <> "总分" Then
            cnames &= "(Select top 1 " & ary & " from {学生成绩库} b where b.准考号 = a.准考号 And b.考试名称 = '" & dr("考试名称") & "') as [" & dr("考试名称") & "_" &  ary & "],"
            Total &= "isnull([" & dr("考试名称") & "_" &  ary & "], 0)+"
            onames &= "[" & dr("考试名称") & "_" &  ary & "],"
            If dic.ContainsKey(ary) = False Then
                dic.Add(ary, "isnull([" & dr("考试名称") & "_" &  ary & "],0) * " & dr("权重") & "+")
            Else
                dic(ary) = dic(ary) & "isnull([" & dr("考试名称") & "_" &  ary & "],0) * " & dr("权重") & "+"
            End If
        End If
    Next
    If dr("科目").contains("总分") Then
        onames &= Total.TrimEnd("+") & " as [" & dr("考试名称") & "_总分],"
    End If
    enames &= "'" & dr("考试名称") & "',"
Next

Dim zfname As String = ""
For Each k As String In dic.Keys
    onames &= dic(k).TrimEnd("+") & " As 成绩汇总_" & k & ","
    zfname &= dic(k)
Next
onames &= zfname.TrimEnd("+") & " as 成绩汇总_总分"

Dim sql As String = "select " & onames.TrimEnd(",") & "  from (Select 准考号, 姓名, " & cnames.TrimEnd(",") & " from {学生成绩库} a where 考试名称 In (" & enames.TrimEnd(",") & ") group by 准考号, 姓名) As c"
output.show(sql)

Dim q As new QueryBuilder
q.C
q.TableName = "成绩汇总"
q.SelectString = sql
q.Build
MainTable = Tables("成绩汇总")

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/29 17:21:00 [显示全部帖子]

以下是引用方丈在2014-5-29 17:13:00的发言:

谢谢!

但 “座号”  没有根据“计算公式表”中第一行的“考试名称”的改变而改变

 

座位号,获取的是学生最后一个/当前的座位号,逻辑上也是应该这样的。

 

如果要修改,就修改这句代码 select top 1 座号 from {学生成绩库} d where c.准考号 = d.准考号 order by 班级 desc


 回到顶部