Office中国论坛/Access中国论坛

标题: 这样的查询该怎么做? [打印本页]

作者: 静儿    时间: 2006-7-22 19:26
标题: 这样的查询该怎么做?
来源表字段:

a;b;c(参数用";"分隔但个数不定)

a

a;r;t;u

需要将它变成取出上表所有参数,去除重复的然后分行显示.)

a

b

c

r

t

u

该怎么做?
作者: andymark    时间: 2006-7-22 22:54
先把来源表的字段转化为没重复的字符串,a,b,c,r,t,u 再用split实现
作者: 静儿    时间: 2006-7-22 23:37
这不是字串处理,是记录的整理.该怎么做?
作者: andymark    时间: 2006-7-23 00:00
哦,把例子传上来看看
作者: sgrshh29    时间: 2006-7-23 00:06
以下是引用andymark在2006-7-22 14:54:00的发言:
先把来源表的字段转化为没重复的字符串,a,b,c,r,t,u 再用split实现

如果单用split难以处理,可以用数组结合split循环处理.
作者: andymark    时间: 2006-7-23 00:12
现在先要理解楼主的原意,最好有例子,方法可以有好多种
作者: wuaza    时间: 2006-7-23 00:18
先做了一个,希望高手再完善一下。[attach]19196[/attach]

作者: 静儿    时间: 2006-7-23 00:42
能不能不用临时表的形式?因为条件不允许.
作者: 情比金坚    时间: 2006-7-23 02:02
新生成的数据需要放到哪里去?
作者: andymark    时间: 2006-7-23 02:34
       在wuaza的例子上修改了一下,先按模糊查出tb表的所有记录,然后再根据这筛选tb1记录。不知理解是否否正确。

[attach]19200[/attach]

作者: wuaza    时间: 2006-7-23 07:01
费了好大的劲,终于做出来一个。大家看看。[attach]19202[/attach]

作者: andymark    时间: 2006-7-23 07:24
辛苦啦 [em27]
作者: 老鬼    时间: 2006-7-23 08:22
标题: OK
先建个函数,用来返回源表中字段值的组合:

Function strget()
Dim rs As New ADODB.Recordset
Dim STR As String
rs.Open "select 源表字段 from 源表", CurrentProject.Connection
STR = rs.GetString(adClipString, , , ";")
strget = Left(STR, Len(STR) - 1)
End Function

建个表,将表字段设成“索引(不重复)”,然后运行一段代码:

Private Sub CommandButton_Click()
arr = Split(strget, ";")
For Each ar In arr
    DoCmd.SetWarnings False
    DoCmd.RunSQL "insert into 新表(字段) select '" & ar & "'"
    DoCmd.SetWarnings True
Next
MsgBox "set OK!"
End Sub

就可以了,详见附件:[attach]19204[/attach]

作者: wuaza    时间: 2006-7-23 16:37
后来发现我那个查询2是多余的,缺省情况下UNION 运算时不返回重复的记录!

直接用“查询1”就可以了。

在一般情况下,如果允许用辅助表,那么老鬼的方法值得一试。
作者: lhsh    时间: 2006-7-23 19:07
学习学习
作者: andymark    时间: 2006-7-23 19:36
不用临时表,在10楼例子的基础上改成联合查询的方式


[attach]19210[/attach]


[此贴子已经被作者于2006-7-23 16:17:35编辑过]


作者: 老鬼    时间: 2006-7-23 23:34
不用临时表的意思是不是说,也不能用临时的查询?因为两者的性质接近啊。那怎么处理哦。

楼上的高手们可以把UNION ALL中的ALL去掉,得出的查询值就不会重复了,用不着DISTINCT。
作者: andymark    时间: 2006-7-24 00:26
以下是引用老鬼在2006-7-23 15:34:00的发言:


不用临时表的意思是不是说,也不能用临时的查询?因为两者的性质接近啊。那怎么处理哦。

楼上的高手们可以把UNION ALL中的ALL去掉,得出的查询值就不会重复了,用不着DISTINCT。



        没看到楼主的例子,大家都只是按题意各人理解,具体要怎么样,只有楼主才清楚

         
作者: 静儿    时间: 2006-7-24 01:40
因为程序须在光盘上只读使用,因此会有所限制。我试了一下,11楼wuaza做的可以使用,但我看不懂,wuaza能不能解释一下下呢?
作者: wuaza    时间: 2006-7-24 02:10
主要是分段取出字符串,然后再联合。

andymark版主的应该也可以实现你的要求。原理大同小异。

具体在QQ上聊吧。
作者: maliangxyz    时间: 2006-7-24 04:07
新手报到,努力学习!
作者: nmfx1122    时间: 2006-7-24 14:30
顶!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3