以文本方式查看主题
- 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
|