以文本方式查看主题

-  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=105302)

--  作者:HJG_HB950207
--  发布时间:2017/8/16 15:52:00
--  筛选问题
表A 有 4列

       车号    限重    实际重量  收费员
         :
         :
         :

现在要将同车号但限重有不一致的车辆筛选数来。


(限重对同一台车应是固定值,但有时司机为减少缴费,互换车牌,因而会出现同一车号限重却不一致的问题)
谢谢!

--  作者:有点甜
--  发布时间:2017/8/16 16:07:00
--  
Dim dt As Table = Tables("表a")
Dim idxs As String = "\'\',"
For Each s As String In dt.DataTable.GetValues("第一列")
    Dim cps As List(Of String) = dt.DataTable.GetValues("第二列", "第一列 = \'" & s & "\'")
    If cps.count > 1 Then
        idxs &= "\'" & s & "\',"
    End If
Next
dt.filter = "第一列 in (" & idxs.trim(",") & ")"

--  作者:HJG_HB950207
--  发布时间:2017/8/16 16:58:00
--  
谢谢老师,请教能否用交叉统计,先把每牌照的车的限重的列出来,然后判断不为零或空格的各列值是否相等,这样是否快些啊,按上面的直接筛选,10万条记录已计算好长时间了。

--  作者:有点甜
--  发布时间:2017/8/16 17:16:00
--  

Dim idxs As String = "\'\',"
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
Dim cs As String = "第一列,第二列"
For Each dr As DataRow In DataTables("表A").Select("", cs)
    Dim flag As Boolean = False
    If pdr IsNot Nothing Then
        If dr("第一列") <> pdr("第一列") Then
            flag = True
        End If
        If flag Then
            count = 1
        Else
            If dr("第二列") <> pdr("第二列") Then
                count += 1
                If count = 2 Then
                    idxs &= "\'" & dr("第一列") & "\',"
                End If
            End If
        End If
    Else
        count += 1
    End If
    pdr = dr
Next


Tables("表A").Filter = "第一列 In (" & idxs.trim(",") & ")"