|
本帖最后由 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
|