以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]请教如何查找第二个或最后一个不重复的字符串  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=12354)

--  作者:yanzhen2010
--  发布时间:2011/8/30 21:09:00
--  [求助]请教如何查找第二个或最后一个不重复的字符串
请教如何查找第二个或最后一个不重复的字符串

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


问题如图
如:查找住院号为750的病人所在的科室。排除重复后找出第二个或最后一个不重复的科室名称。
有点想自动列表项目的排除。
诚望指点

如:第一次出现的不重复科室为“1病区”,第二次出现得不重复科室为“2病区”。

我的代码是:  
 Dim zk As  DataRow = DataTables("长期医嘱").Find("[住院号] = \'" & e.DataRow("住院号") & "\'","科室",1)
不能找出第二次出现得不重复科室,而是第二行。
[此贴子已经被作者于2011-8-30 21:19:28编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/8/30 21:29:00
--  

http://www.foxtable.com/help/topics/0392.htm

http://www.foxtable.com/help/topics/1435.htm

 

 


--  作者:yanzhen2010
--  发布时间:2011/8/30 22:11:00
--  
谢谢老总,但是老总没有明白我的意图,我并不是要提取全部不重复的值作为集合或列表项目,而是在不重复的值中找出第二个不重复的值填入到其他表。

我修改的代码如下:

 Dim zk As  DataRow = DataTables("长期医嘱").Find("[住院号] = \'" & e.DataRow("住院号") & "\'","科室 Desc")
此代码用”科室“排序后,找出不是最后一次的记录,也不是不重复科室出现的第一次记录,而是不重复科室出现的第二次记录。

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


如图:代码找出的不是2011-08-11的记录,也不是2011-8-20 的记录,而是2011-8-26 的记录
[此贴子已经被作者于2011-8-30 22:19:23编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/8/30 22:13:00
--  
呵呵,既然已经得到全部的值,那么要取得其中第二个值,不是很简单吗?
--  作者:yanzhen2010
--  发布时间:2011/8/30 22:29:00
--  
对老总来说很简单,对我来说不容易,没有经验。

以我的理解,如果使用GetUniqueValues函数,那么后面的代码将需要更多的判断,
首先要判断科室数是不是大于2个;第二还要使用分割函数进行分割才能得到第二个不重复的值。

我喜欢简单。
我的完整代码如下:
If e.DataCol.Name = "住院号" Then
    If e.DataRow("住院号") IsNot Nothing Then       
        Dim zk As  DataRow = DataTables("长期医嘱").Find("[住院号] = \'" & e.DataRow("住院号") & "\'","科室 Desc")
        If zk IsNot Nothing Then
            e.DataRow("转入日期") =zk("开嘱日期")
            e.DataRow("转入科室") =zk("科室")
            e.DataRow("接管医生") =zk("医生")
        Else
            e.DataRow("转入日期") =Nothing
            e.DataRow("转入科室") =Nothing
            e.DataRow("接管医生") =Nothing
        End If
    End If
End If
[此贴子已经被作者于2011-8-30 22:41:51编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/8/30 22:35:00
--  

Dim vals As List(of String) = DataTables("长期医嘱").GetUniqueValues(("[住院号] = \'" & e.DataRow("住院号") & "\'", "科室")

if vals.Count > 0 then

   messagebox.show("第一个值:" & vals(0))

end if

if vals.Count > 1 then

    messagebox.show("第二个值:" & vals(1))

end if


--  作者:e-png
--  发布时间:2011/8/30 22:40:00
--  

你2011-8-26 的记录有四个,要那一个呢。

 


--  作者:yanzhen2010
--  发布时间:2011/8/30 22:44:00
--  
要的是第一次出现2病区的记录
--  作者:e-png
--  发布时间:2011/8/30 23:00:00
--  
以下是引用yanzhen2010在2011-8-30 22:44:00的发言:
要的是第一次出现 2病区的记

2011-8-26 的记录有四个都有可能排在第一次出现的位置呀。其实你是想要最后的2病区的记录,只是它没有排在可看到的位置而已,建议你按开嘱日期排序。


--  作者:yanzhen2010
--  发布时间:2011/8/30 23:20:00
--  
If e.DataCol.Name = "住院号" Then
    If e.DataRow("住院号") IsNot Nothing Then             

Dim vals As List(of String) = DataTables("长期医嘱").GetUniqueValues(("[住院号] = \'" & e.DataRow("住院号") & "\'", "科室")

        If vals IsNot Nothing Then
            e.DataRow("转入日期") =vals("开嘱日期")
            e.DataRow("转入科室") =vals(1)
            e.DataRow("接管医生") =vals("医生")
        Else
            e.DataRow("转入日期") =Nothing
            e.DataRow("转入科室") =Nothing
            e.DataRow("接管医生") =Nothing
        End If
    End If
End If
经过老总指点,写出了如上代码,虽然能够通过vals(1)得到“科室”名称,但是如何得到对应的"开嘱日期"和“医生”呢?反复试验也没成功。

f e.DataCol.Name = "住院号" Then
    If e.DataRow("住院号") IsNot Nothing Then             

Dim vals As List(of String) = DataTables("长期医嘱").GetUniqueValues(("[住院号] = \'" & e.DataRow("住院号") & "\'", "科室")

        If vals IsNot Nothing and 
vals.count>1 Then
            e.DataRow("转入日期") =vals("开嘱日期")
            e.DataRow("转入科室") =vals(1)
            e.DataRow("接管医生") =vals("医生")
        Else
            e.DataRow("转入日期") =Nothing
            e.DataRow("转入科室") =Nothing
            e.DataRow("接管医生") =Nothing
        End If
    End If
End If
经过老总指点,写出了如上代码,虽然能够通过vals(1)得到“科室”名称,但是如何得到对应的"开嘱日期"和“医生”呢?反复试验也没成功。
[此贴子已经被作者于2011-8-30 23:28:13编辑过]