以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  SQL 分组 用狐表自己的方法完成  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=65793)

--  作者:打错潇洒
--  发布时间:2015/3/23 11:22:00
--  SQL 分组 用狐表自己的方法完成
select * f rom 
(select t.*, row_number() over(partition by 分组字段 order by 排序字段 desc ) rn
f rom 表名称 t )
where rn=1

以上的SQL 提取到不同的值 根据排序字段 就行分组

我的想法是 用 简单的语句 加载 数据 

SELECT DISTINCT NAME,Data F ROM Student ORDER BY Data DESC

加载过来后 


图片点击可在新窗口打开查看此主题相关图片如下:1.jpg
图片点击可在新窗口打开查看

然后对这张表格中重复的值中根据Data 保留Data中最大的值 

用代码如何实现 


--  作者:Bin
--  发布时间:2015/3/23 11:26:00
--  
直接用SQL语句不是更好么?


--  作者:jspta
--  发布时间:2015/3/23 11:27:00
--  
你把SQL生成视图或表函数,调用即可

Select * f rom 视图名称。

--  作者:狐狸爸爸
--  发布时间:2015/3/23 11:33:00
--  

用SQL语句更好,如果一定要用foxtable处理,参考:

 

DataTables("表A").StopRedraw
Dim drs As List(of DataRow) = DataTables("表A").Select("","Name, Data Desc")
For i As Integer  = 1 To drs.count-1
    If drs(i)("Name") = drs(i-1)("Name")
        drs(i).remove
        i  =i +1
    End If
Next
DataTables("表A").ResumeRedraw()

 

但是效率会比较低。


--  作者:狐狸爸爸
--  发布时间:2015/3/23 11:37:00
--  

这样完善点:

 

DataTables("表A").StopRedraw
Dim drs1 As List(of DataRow) = DataTables("表A").Select("","Name, Data Desc")
Dim drs2 As New List(of DataRow)
For i As Integer  = 1 To drs1.count-1
    If drs1(i)("Name") = drs1(i-1)("Name")
        drs2.add(drs1(i))
    End If
Next
For Each dr As DataRow In drs2
    dr.Remove
Next
DataTables("表A").ResumeRedraw()