以下是引用方丈在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("成绩汇总")