设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[表] 一行变多行的问题

[复制链接]
跳转到指定楼层
1#
发表于 2007-6-25 21:50:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想要把一行转变为多行,例

a 11,10,14,.....

b      58,73,386,...

c      1023,1325,2986

就像上面这样,一格中有8或9个数据,要把他们折开,前面的信息不变,转换为

a   11

a   10

a   14

b  58

b  73

b  386

c  1023

c1325 ......

请问在access中可否实现,应该如何实现,谢谢啦。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-6-26 03:21:00 | 只看该作者
用记录集,把11,10,14,。。。转为数组,再追加。。。
3#
发表于 2007-6-26 18:52:00 | 只看该作者
请参阅如何向参数查询传递参数
http://www.office-cn.net/forum.php?mod=viewthread&tid=54867&replyID=&skin=1
4#
发表于 2007-6-27 06:14:00 | 只看该作者
刚刚看过楼上的链接

Parameters lngCaseNo string;



Select *



from Cases where CaseNo in (Select mid(lngCaseNo&',',first(CaseNo),Last(CaseNo)-first(CaseNo)) from Cases where CaseNo<=len(lngCaseNo)+1 Group by instr(CaseNo,lngCaseNo&',',','))

楼上的可以帮助解释一下这个代码的意思吗,我是一个用Access2000入门的学生,上面的代码用Access2000可以运行吗。

谢谢先

[em04]
5#
发表于 2007-6-27 07:28:00 | 只看该作者
论坛有多行变一行的例子,反操作写个FUNCTION
6#
发表于 2007-6-27 16:17:00 | 只看该作者
新建一个辅助表 Cases,字段CaseNo,长整型,输入从1-10000,此辅助表的用处很大。
再建一个要行变列表Test,字段T2,T1,输入
t2        t1
a 11,10,14
b    50,73,386
c    1023,1325,2986
新建查询
SELECT t2,t1,instr(CaseNo+1,t1 & ',',',') AS lngMid, mid(t1,CaseNo,lngmid-caseNo) as RowToColumn
FROM Cases, Test
WHERE instr(CaseNo+1,t1 & ',',',',)<>0 and caseno<=len(t1)+2 And mid(',' & t1 & ',',caseno,1)=','
order by t2
这个代码可能理解起来比较简单,我用了10年才想到的,虽然用VBA可以很简单的实现,但是用SQL直接解决实际问题,可能会获得更大的乐趣
7#
发表于 2007-6-27 16:38:00 | 只看该作者
这个查询简单理解就是判断t1有多少个字符,每个字符产生一行(由辅助表生成)
From Cases,Test 此语句生成2个表的哈希连接,假如cases有100行,test有10行,那么生成一个有100X10=1000行的查询,然后在条件语句中限制 mid(',' & t1 & ',',caseno,1)=',' ,把t1变为头尾都有“,”,查询结果限制为只有“,”的那些行。
比如说11,10,14变成,11,10,14,有“,”的位置为1,4,7,10
instr(CaseNo,t1 & ',',',')<>0 理解为:11,10,14变成11,10,14,   有“,”的位置为3,6,9

8#
发表于 2007-6-27 23:08:00 | 只看该作者
1、SQL语句比较巧妙,原来处理这种情况都是用VBA;
2、效率不高,1-10000都要判断一次,记录数10000*工作表记录数;
3、如工作表是备注字段,最大可储存2G,SQL语句处理起来有点问题。
9#
发表于 2007-6-27 23:25:00 | 只看该作者
caseno<=len(t1)+2
这个条件判断是限制返回多少行,
通常这样的字符串不会超过200个字符
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-21 13:30 , Processed in 0.119626 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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