以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]计算汇总成绩的代码  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=50966)

--  作者:方丈
--  发布时间:2014/5/15 23:22:00
--  [求助]计算汇总成绩的代码

      根据“计算公式表”,把多次考试各科成绩查询出来,再分别乘以权重后,加在一起,最后生成成绩汇总临时表(就

 

“汇总表样式”,前面各次考试的数据是查询出来的原始数据,后面的“汇总成绩”是计算权重后的结果)

 

各科成绩来自于“学生成绩库”后台数据(SQL远程数据,没有加载),统计的考试次数和科目都不是固定的,是根据“公式表”来的

 

请教查询、计算汇总成绩、生成汇总表按钮的代码

 

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


[此贴子已经被作者于2016/6/26 22:59:41编辑过]

--  作者:方丈
--  发布时间:2014/5/16 6:49:00
--  

顶顶


--  作者:lsy
--  发布时间:2014/5/16 10:54:00
--  

列名称不符合狐表规范、列名称不统一规则、数据类型随便选、下拉列表胡乱弄,也不看看效果如何,本来简单的事情,人为弄成复杂的事情。

 

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

[此贴子已经被作者于2014-5-16 12:52:48编辑过]

--  作者:有点甜
--  发布时间:2014/5/16 11:34:00
--  
图片点击可在新窗口打开查看  图片点击可在新窗口打开查看 一做下去,就没完没了了......
--  作者:有点甜
--  发布时间: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编辑过]

--  作者:方丈
--  发布时间:2014/5/16 12:25:00
--  
以下是引用lsy在2014-5-16 10:54:00的发言:

列名称不符合狐表规范、列名称不统一规则、数据类型随便选、下拉列表胡乱弄,也不看看效果如何,本来简单的事情,人为弄成复杂的事情。

 

 

 下载信息  [文件大小:596.0 KB  下载次数:3]
图片点击可在新窗口打开查看点击浏览该文件:成绩管理.table

 

批评得对,出于保密,没有用原来的系统,临时做了一个,考虑不周,临时表的列名用的是原数据库的“考试名称”(原来不用考虑数字的问题,前半部分表示的是日期和年级,后半部分是名称,现在考虑倒过来),谢谢指教!

 

 

另外,汇总表列名不是固定的,是根据公式表临时生成的,附件的汇总表只是一个样式,现在变成固定的

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

--  作者:方丈
--  发布时间:2014/5/16 12:26:00
--  
以下是引用有点甜在2014-5-16 11:34:00的发言:
图片点击可在新窗口打开查看  图片点击可在新窗口打开查看 一做下去,就没完没了了......

不好意思,谢谢


--  作者:y2287958
--  发布时间:2014/5/16 16:38:00
--  

 

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

[此贴子已经被作者于2014-5-16 18:39:58编辑过]

--  作者:方丈
--  发布时间:2014/5/16 19:54:00
--  
以下是引用y2287958在2014-5-16 16:38:00的发言:

 

 下载信息  [文件大小:87.9 KB  下载次数:1]
图片点击可在新窗口打开查看点击浏览该文件:aa.zip

[此贴子已经被作者于2014-5-16 18:39:58编辑过]

谢谢!第二个统计窗口按钮不理解


--  作者:y2287958
--  发布时间:2014/5/16 21:04:00
--  
第二个不用理的。