注册 登录
编程论坛 ASP技术论坛

一个SQL语句的问题,希望大家帮忙解决下。

litom 发布于 2010-11-01 23:43, 351 次点击
只有本站会员才能查看附件,请 登录


设计的数据表如下图,主要是关于auter字段,需要实现的情况是:检索字段auter,要求列出里面的名字,但是要去掉重复名字,也就是重复的名字只列一次,而且当字段里有两个名字的时候,要把它分开列出来。比如上面那个表,要是列出来的话就应该是:李楠 张旭 张希 朱国锋 王大为 肖伟 张亮 高兵 任杰。不知道我的意思说清楚了么,希望高手帮指点下,谢谢。还有一点要说明的是:一个字段中如果有两个名字,那么名字之间是按照一个空格来分开的,我目前想到分开空格的办法是 charindex(' ',auter)>0 就说明这个字段是两个名字了。可是其他方面还是有点郁闷,开始想的思路是分三个记录集,一个是没有空格的名字集合一下,一个是有空格的空格左边的集合,一个是空格右边的集合,三个集合再比较一下最后得出列。感觉太麻烦,所以想请教大家一下。
2 回复
#2
cnfarer2010-11-02 08:18
如果有一本书作者有更多人呢,处理起来岂不更难?还是表结构的问题!
#3
dzt00012010-11-02 09:13
我的思路是在数组中把重复项删除
程序代码:
<%
autherlist
=","    '用于保存所有auther
sql="select auher from [表名]"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open sql,Conn,
1,3
Do While Not Rs.EOF
  autherlist
=autherlist&Rs("auther")&","
Rs.MoveNext
loop
Rs.Close

if instr(autherlist," ")>0 then autherlist=replace(autherlist," ",",")    '替换空格为,

'数组删除重复项的函数
Function MoveR(Rstr)

 
Dim i,SpStr

 SpStr
= Split(Rstr,",")

 
For i = 0 To Ubound(Spstr)
  
If I = 0 then
   MoveR
= MoveR & SpStr(i) & ","
  
Else
   
If instr(MoveR,SpStr(i))=0 and i=Ubound(Spstr) Then
    MoveR
= MoveR & SpStr(i)
   
Elseif instr(MoveR,SpStr(i))=0 Then
    MoveR
= MoveR & SpStr(i) & ","
   
End If
  
End If

 
Next
End Function

response.write MoveR(autherlist)
%>
1