以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- [求助]请教删除重复值的问题! (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=30938)
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/7 12:00:00
-- [求助]请教删除重复值的问题!
有3个列 删除表中3列都相等的重复行 ,只保留一行 怎么弄?
|
-- 作者:Bin
-- 发布时间:2013/4/7 12:19:00
--
这个不是很好处理,最好是当初添加的时候就限制不能重复.目前只想到了比较笨的实现方式,这样批量循环的话很没效率.如果数据量大的话会耗时很久.我再想想看能不能想到比较好的办法.
|
-- 作者:blackzhu
-- 发布时间:2013/4/7 14:51:00
--
试试这个代码,大量数据 没有测试过.
Dim t As Table = Tables("表A") t.Select(t.Rowsel,t.cols("第一列").Index) syscmd.Filter.ShowRedundantValues For i As Integer = t.Rows.Count -1 To 0 Step -1 t.rows(i).Delete Next t.Datable.Save t.filter = ""
|
-- 作者:blackzhu
-- 发布时间:2013/4/7 14:52:00
--
可能会闪屏 加个停止绘制试试.
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/8 10:31:00
--
以下是引用muhua在2013-4-7 15:34:00的发言:
Dim i As Integer For i = DataTables("表A").DataRows.Count-1 To 0 Step -1 Dim dr As DataRow = DataTables("表A").DataRows(i) Dim dr2 As DataRow = DataTables("表A").Find("第一列=\'" & dr("第一列") & "\' and 第二列=\'" & dr("第二列") & "\' and _Identify <> " & dr("_Identify")) If dr2 IsNot Nothing Then dr2.Delete End If Next
执行了一下 卡了。。。 一直不动 代码能优化不?
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/8 13:42:00
--
8万多条
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/8 14:31:00
--
我现在碰到一个头疼的问题 就是填充 接收表里本来就存在的数据 用filter填充后 居然还能重复填充了一次 才导致这么多数据量
Dim wbl1 As WinForm.Table = e.Form.Controls("Table1") Dim tbl1 As Table = wbl1.Table tbl1.DataTable.Save()
Dim v As Double v = Tables("售后客户录入_table1").Compute("max(公里数)") Dim d As Date d = Tables("售后客户录入_table1").Compute("max(进店时间)")
If e.Form.controls("textbox1").text = v And e.Form.controls("DateTimePicker2").text = d Then Tables("售后客户档案_售后客户档案Table2").current.save() e.sender.Enabled = False Else If DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "\'") >= 3 Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A" ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "\'") = 2 Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "B" ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-1) &"# And 底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "\'") = 1 Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "C" \'ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& date.today.addyears(-1)&"# and 底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "\'") <= 1 Then \'ElseIf DataTables("售后客户录入_Table1").Compute("Count(进店时间)","进店时间 >= #"& Tables("售后客户档案_售后客户档案Table2").current("最后进店日期").addyears(-2) &"# And 底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").current("底盘号") & "\'") = 0 Then \'Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "无效档案" Else Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "D" End If If (e.Form.controls("textbox1").text - v) < 7000 And (CDate(e.Form.controls("DateTimePicker2").value) - d).totaldays < 180 Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A" End If If Date.Today.addmonths(-3) < Tables("售后客户档案_售后客户档案Table2").current("建档日期") Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "A" End If If Tables("售后客户档案_售后客户档案Table2").current.IsNull("编号") = True Then Tables("售后客户档案_售后客户档案Table2").current("客户等级") = "E" End If Tables("售后客户档案_售后客户档案Table2").current.save()
Dim g As New Filler g.SourceTable = DataTables("售后客户档案_售后客户档案Table2") \'指定数据来源 g.SourceCols = "底盘号,里程,最后进店日期" \'指定数据来源列 g.DataTable = DataTables("售后客户录入_Table1")\'指定数据接收表 g.DataCols = "底盘号,公里数,进店时间" \'指定数据接收列 g.ExcludeExistValue =True g.ExcludeNullValue =False g.Distinct =True g.Append =True g.Fill() Dim wbl As WinForm.Table = e.Form.Controls("Table1") Dim tbl As Table = wbl.Table tbl.DataTable.Save() DataTables("售后客户档案_售后客户档案Table1").load Tables("售后客户档案_售后客户档案Table1").filter = "底盘号 = \'" & Tables("售后客户档案_售后客户档案Table2").Current("底盘号") & "\'" Tables("售后客户档案_售后客户档案Table1").Sort = "进店时间" e.sender.Enabled = False End If
就是红色这段~ 只要一保存 就把来源表的3000多数据 全部填充进了 接收表 不管有没重复
g.ExcludeExistValue =True
g.Distinct =True 这2句 貌似没起到效果!
[此贴子已经被作者于2013-4-8 14:34:03编辑过]
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/9 8:52:00
--
以下是引用muhua在2013-4-8 11:20:00的发言:
Dim i As Integer For i = DataTables("订单").DataRows.Count-1 To 0 Step -1 Dim dr As DataRow = DataTables("订单").DataRows(i) Dim dr2 As DataRow = DataTables("订单").Find("产品=\'" & dr("产品") & "\' and 客户=\'" & dr("客户") & "\' and _Identify <> " & dr("_Identify")) If dr2 IsNot Nothing Then dr2.Delete End If Application.DoEvents Next
数据量很大吗?
很慢 一条条的在删除
[此贴子已经被作者于2013-4-9 8:56:01编辑过]
|
-- 作者:czy
-- 发布时间:2013/4/9 14:39:00
--
这样试试:
Dim cmd As New SQLCommand cmd.CommandText = "delete from {表A} where [_Identify] not in (select max([_Identify]) from {表A} group by 第一列,第二列,第三列)" cmd.ExecuteNonQuery() DataTables ("表A").Load()
|
-- 作者:gaoyong30000
-- 发布时间:2013/4/9 14:44:00
--
Microsoft Jet 数据库引擎找不到输入表或查询 \'~TMPCLP历史进店记录\'。 确定它是否存在,以及它的名称的拼写是否正确。
Dim cmd As New SQLCommand cmd.CommandText = "delete from {历史进店记录} where [_Identify] not in (select max([_Identify]) from {历史进店记录} group by 进店时间,公里数,底盘号)" cmd.ExecuteNonQuery() DataTables ("历史进店记录").Load()
此主题相关图片如下:无标题.png
|