设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1945|回复: 3
打印 上一主题 下一主题

[模块/函数] 【查询探讨】答复todaynew同志&再问字段拆分查询的问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-9-18 22:18:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 aslxt 于 2010-9-18 22:27 编辑

前几天我在论坛发了一个叫做【在查询中如何实现字段值的拆分?】的帖子,得到todaynew同志的热情回复,todaynew同志又耐心地发了【阳关道与独木桥---再论数据表设计】的帖子,并提供了“上中下”三个选择,让我受益颇丰,谢谢。
可能之前没有表达清楚我的意思,这里说明一下:
1、表1的结构不是我可以修改的;
2、临时性的结果不是很难得到,除了“上中下”三种方法,我还可以有更笨的方法得到;
3、我的意思主要探讨:只用查询+自定义函数+函数是否可以得到结果,这就是非要走【独木桥】的原因。
附件是走独木桥的最新结果,可以看查询中的“直接查询”,在被拆分的字段值拆分为8列或以下的情况才可用,例如"A|B|3C|D|E|F"拆分后得到6列,"A|B|3C|D"拆分后得到4列。
sql语法为:
SELECT 临时查询.id, 临时查询.部门, 临时查询.姓名
FROM (SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",1) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",2) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",3) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",4) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",5) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",6) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",7) AS 姓名 FROM 表1
union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",8) AS 姓名 FROM 表1) AS 临时查询
WHERE (((临时查询.姓名)<>""));
问题来了:如何动态地适应更多列的情况?难道只能在子查询中人工增加“union SELECT 表1.id, 表1.部门, mysplit("表1","id",[id],"员工",9) AS 姓名 FROM 表1 union ...“?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2010-9-19 09:29:22 | 只看该作者
由于记录数和员工字段中的姓名数均不确定,因此采用直接写SQL语句的方法似乎搞不定,即使能写,也一定很麻烦。只能通过VB来编制SQl语句。
3#
发表于 2010-9-19 09:41:36 | 只看该作者
本帖最后由 红尘如烟 于 2010-9-19 09:49 编辑

楼主的理解有误,Todaynew的那个例子中,联合查询是通过VBA代码自动生成的,不是要你去手动创建的,再说查询只是一种称谓,并不是说一定要通过查询对象得到才算是查询,只要是能够得到需要的结果,我们就都可以称之为查询。

这个拆分无非就是通过记录集来处理而已,只不过最后输出方式不一样,这里给出三种输出方式,一种是通过一个动态的联合查询对象输出,另一种是通过将数据添加到临时记录集,并将此临时记录集绑定到窗体来输出,还有一种是直接输出到值列表框(需要注意的是值列表框的行来源有字数限制)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
发表于 2010-9-19 12:09:18 | 只看该作者
回复 红尘如烟 的帖子

第二法最好,类似于用临时表。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-18 17:36 , Processed in 0.108767 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表