以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  排序效率  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=95266)

--  作者:刘林
--  发布时间:2017/1/14 17:43:00
--  排序效率
Dim cmd As New SQLCommand
Dim dt As DataTable 
cmd.c
Dim schoolname As String = user.group
cmd.CommandText = "SELE CT 考试名称,学校,年级,学校班级,总分,班序,校序,[_Identify] from {小生表}"
dt = cmd.ExecuteReader(True)
Dim Arys As List(Of String())  = dt.GetValues("考试名称|学校|年级")
For Each Ary As String() In Arys
    Dim drs As List(Of DataRow) = dt.Select("[考试名称] = \'" & ary(0) & "\'And [学校] = \'" & ary(1) & "\'and [年级] =\'" & ary(2) & "\'", "总分 DESC")
    For n As Integer = 0 To drs.Count - 1 \'遍历所有行
        If n > 0 AndAlso drs(n)("总分") = drs(n-1)("总分") Then \'如果总分和上一行相同
            drs(n)("校序") = drs(n-1)("校序") \'则排名等于上一行
        Else
            drs(n)("校序") = n + 1 \'设置排名
        End If
    Next
Next

Dim Arys1 As List(Of String())  = dt.GetValues("考试名称|学校|年级|学校班级")
For Each Ary1 As String() In Arys1
    Dim drs As List(Of DataRow) = dt.Select("[考试名称] = \'" & ary1(0) & "\'And [学校] = \'" & ary1(1) & "\'and [年级] =\'" & ary1(2) & "\'And [学校班级] = \'" & ary1(3) & "\'", "总分 DESC")
    For m As Integer = 0 To drs.Count - 1 \'遍历所有行
        If m > 0 AndAlso drs(m)("总分") = drs(m-1)("总分") Then \'如果总分和上一行相同
            drs(m)("班序") = drs(m-1)("班序") \'则排名等于上一行
        Else
            drs(m)("班序") = m + 1 \'设置排名
        End If
    Next
Next
Dim Arys2 As List(Of String())  = dt.GetValues("考试名称|年级")
For Each Ary2 As String() In Arys2
    Dim drs As List(Of DataRow) = dt.Select("[考试名称] = \'" & ary2(0) & "\'  And [年级] = \'" & ary2(1) & "\'", "总分 DESC")
    For m As Integer = 0 To drs.Count - 1 \'遍历所有行
        If m > 0 AndAlso drs(m)("总分") = drs(m-1)("总分") Then \'如果总分和上一行相同
            drs(m)("区序") = drs(m-1)("区序") \'则排名等于上一行
        Else
            drs(m)("区序") = m + 1 \'设置排名
        End If
    Next
Next
dt.save()
DataTables("小生表").load

老师,我想用上面代码对成绩表排班序,校序,区序,效率很低,要等很久,请问如何能快速完成,前提是小生表不能加载,请指教,谢谢

--  作者:有点色
--  发布时间:2017/1/15 12:06:00
--  

加载和排序,并不会影响效率。你把这两句代码去掉,看看速度

 

dt.save()
DataTables("小生表").load

--  作者:刘林
--  发布时间:2017/1/15 21:03:00
--  
老师去掉两句到时快些了,但数据打开排序结果没写上,跟没排一样,有什么方法能够快速排好
--  作者:有点色
--  发布时间:2017/1/16 3:26:00
--  
以下是引用刘林在2017/1/15 21:03:00的发言:
老师去掉两句到时快些了,但数据打开排序结果没写上,跟没排一样,有什么方法能够快速排好

 

得到结果以后,合成sql语句,更新回数据库

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=52855&skin=0