以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求教:判断某列相同编号的最大值  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=28196)

--  作者:kevin
--  发布时间:2013/1/22 12:23:00
--  求教:判断某列相同编号的最大值
 
 
 
 

此主题相关图片如下:32.jpg
按此在新窗口浏览图片

--  作者:lin_hailun
--  发布时间:2013/1/22 14:15:00
--  
 如此代码,测试有效,自己修改。

Dim ls As New List(Of String)
For Each dr As DataRow In DataTables("表A").DataRows
    Dim name As String = dr("第一列").substring(0, dr("第一列").indexof("-"))
    If ls.Contains(name) = False Then
        ls.Add(name)
        Dim fdr As DataRow = DataTables("表A").Find("第一列 like \'" & name & "-*\'", "第一列 desc")
        fdr("第二列") = "有效"
    End If
Next

--  作者:kevin
--  发布时间:2013/1/22 15:06:00
--  

你好,谢谢你!

 

Dim ls As New List(Of String)
For Each dr As DataRow In DataTables("表A").DataRows
    Dim name As String = dr("第一列").substring(0, dr("第一列").indexof("-"))
    If ls.Contains(name) = False Then
        ls.Add(name)
        Dim fdr As DataRow = DataTables("表A").Find("第一列 like \'" & name & "-*\'", "第一列 desc")
        fdr("第二列") = "有效"
    End If
Next

 

这样还是不行,

例如,应该这样:

AA-001       [无效]

AA-002       [无效]

AA-003       [有效]

BB-001       [有效]

CC-001       [有效]

CC-002       [有效]

相同名称,有不同序号号时,小序号应该变为[无效],最大的那个应该为 [有效]

 


--  作者:lin_hailun
--  发布时间:2013/1/22 15:07:00
--  
Dim ls As New List(Of String)
Dim idx As New List(Of Integer)
For Each dr As DataRow In DataTables("表A").DataRows
    Dim name As String = dr("第一列").substring(0, dr("第一列").indexof("-"))
    If ls.Contains(name) = False Then
        ls.Add(name)
        Dim fdr As DataRow = DataTables("表A").Find("第一列 like \'" & name & "-*\'", "第一列 desc")

        idx.Add(fdr("_Identify"))       
        fdr("第二列") = "有效"
    Else If idx.Contains(dr("_Identify")) = False Then
        dr("第二列") = "无效"
    End If
Next
[此贴子已经被作者于2013-1-22 17:06:00编辑过]

--  作者:dreamyuan
--  发布时间:2013/1/22 16:07:00
--  

Dim ls As New List(Of String)
Dim name As String
Dim i As Integer
For Each dr As DataRow In DataTables("表A").DataRows
    i = dr("编号").indexof("-")
    name = dr("编号").substring(0,i )
    If ls.Contains(name) = False Then
          ls.Add(name)
          Dim cp1 As String ="SubString(编号,1," & i & ")  =   \'" & name & "\'"
          Dim maxid As String = Tables("表A").Compute("Max(编号)",Cp1)
          DataTables("表A").ReplaceFor("有效否","有效", "[编号] =  \'" & MaxId & "\'")
          DataTables("表A").ReplaceFor("有效否","无效", "[编号] <> \'" & MaxId & "\'and " & cp1 & "")
    End If
Next

 

也测试成功,呵呵 学林老师的思路


--  作者:dreamyuan
--  发布时间:2013/1/22 16:14:00
--  

林老师的代码执行结果有错误!
图片点击可在新窗口打开查看此主题相关图片如下:未命名1.jpg
图片点击可在新窗口打开查看


--  作者:lin_hailun
--  发布时间:2013/1/22 17:08:00
--  
 恩恩确实是写错了,没有注意之后的情况。已经修改。

 还有更好的方便,不过,够用就好了。

--  作者:dreamyuan
--  发布时间:2013/1/22 17:28:00
--  

改了还是有问题呢,会出现空值


--  作者:lin_hailun
--  发布时间:2013/1/22 17:32:00
--  
以下是引用dreamyuan在2013-1-22 17:28:00的发言:

改了还是有问题呢,会出现空值


呵呵,确实,这次可以了。

Dim ls As New List(Of String)
Dim idx As New List(Of Integer)
For Each dr As DataRow In DataTables("表A").DataRows
    Dim name As String = dr("第一列").substring(0, dr("第一列").indexof("-"))
    If ls.Contains(name) = False Then
        ls.Add(name)
        Dim fdr As DataRow = DataTables("表A").Find("第一列 like \'" & name & "-*\'", "第一列 desc")
        idx.Add(fdr("_Identify"))      
        dr("第二列") = "无效"
        fdr("第二列") = "有效"
    Else If idx.Contains(dr("_Identify")) = False Then
        dr("第二列") = "无效"
    End If
Next

--  作者:lin_hailun
--  发布时间:2013/1/22 17:39:00
--  
 再精简一下代码就这样。

Dim prev As String = "-"
For Each dr As DataRow In DataTables("表A").Select("", "第一列 desc")
    If dr("第一列") Like prev.SubString(0, prev.IndexOf("-")) & "-*" = False Then
        dr("第二列") = "有效"
        prev = dr("第一列")
    Else
        dr("第二列") = "无效"
    End If
Next