设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[帮助] 追加查询,循环套用

[复制链接]
跳转到指定楼层
1#
发表于 2014-12-26 11:28:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家
我现在要处理一个表,但是表的表头不固定,每次收到的数据会有变动,只有几个字段是固定的,表的大概样式如下
日期/类目/项目1/项目2/项目3/。。。。。/项目n,各项目字段内容都是数字,各类目的数字
我现在要将其转换到另一张表中,表头如下
日期/类目/项目名/金额
因为个人VB不精通,不知如何写
望指点,谢谢
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2014-12-26 13:46:35 | 只看该作者
1、搜索下老汉的“来回折腾”
2、导入表之后写联合查询(假设导入的表为sheet1):
select 日期.类目,"项目1" as 项目名,项目1 as 金额 from sheet1
union all
select 日期.类目,"项目2" as 项目名,项目2 as 金额 from sheet1
……………………
union all
select 日期.类目,"项目n" as 项目名,项目n as 金额 from sheet1

然后以这个查询为数据源进行追加。
3#
 楼主| 发表于 2014-12-26 14:14:53 | 只看该作者
roych 发表于 2014-12-26 13:46
1、搜索下老汉的“来回折腾”
2、导入表之后写联合查询(假设导入的表为sheet1):
select 日期.类目,"项 ...

不好意思,帖子搜索不到,是不是时间比较久了
我这边的问题是,我不知道每次收表中,有哪些项目(即表头),只有几个是固定的
4#
发表于 2014-12-26 14:17:45 | 只看该作者
本帖最后由 roych 于 2014-12-26 14:20 编辑

1、http://www.office-cn.net/forum.php?mod=viewthread&tid=96091
2、可以先建立一个文本文件,把这个语句保存下来,后面多复制几行不就行了么?新建查询时,修改为SQL视图,然后把语句粘贴上去就好了。我个人不是很推荐写代码。又或者你可以看看这个:
http://www.office-cn.net/thread-119185-2-1.html,第11楼的回复。
5#
 楼主| 发表于 2014-12-29 14:26:32 | 只看该作者
roych 发表于 2014-12-26 14:17
1、http://www.office-cn.net/forum.php?mod=viewthread&tid=96091
2、可以先建立一个文本文件,把这个语 ...

看了你发的样例,和我的需求不同
6#
 楼主| 发表于 2014-12-29 14:31:16 | 只看该作者
roych 发表于 2014-12-26 14:17
1、http://www.office-cn.net/forum.php?mod=viewthread&tid=96091
2、可以先建立一个文本文件,把这个语 ...

我现在收到的原始表,是除了时间,类目是固定,作为列的项目是一直在变化,比如
原表:日期   类目   项目A   项目B......
2014-12-1    A        50        60........
2014-12-2    B        1000     20........
现在要转换为
      日期    类目     项目    金额
2014-12-1  A         项目A   50
2014-12-1  A        项目B    60
2014-12-2  B        项目A   1000
2014-12-2  B       项目B     20

麻烦的地方时,每次收到的表的项目不是固定的  
7#
发表于 2014-12-29 16:18:41 | 只看该作者
本帖最后由 todaynew 于 2014-12-30 11:27 编辑
dsz5142 发表于 2014-12-29 14:31
我现在收到的原始表,是除了时间,类目是固定,作为列的项目是一直在变化,比如
原表:日期   类目   项 ...


写个子程序不就完事了

sub Transition(oldtbname as string,newtbname as string)
      dim rs1 as new adodb.recordset,rs2 as new adodb.recordset
      dim i as long,j as long
      rs1.Open oldtbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      rs2.Open newtbname, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
      for i=1 to rs1.RecordCount
              for j=2 to rs1.fields.count-1
                    if rs1.fields(j).name like "项目*" then
                             rs2.addnew
                             rs2!日期.value=rs1!日期.value
                             rs2!类目.value=rs1!类目.value
                             rs2!项目.value=rs1.fields(j).name
                             rs2!金额.value=rs1.fields(j).value
                             rs2.update
                   end if
            next
            rs1.movenext
      next
     rs1.close:set rs1=nothing
     rs2.close:set rs2=nothing
end sub



点评

我就是懒得写程序^_^这个本身可以在源头上控制的。  发表于 2014-12-29 16:50
8#
 楼主| 发表于 2014-12-30 09:17:23 | 只看该作者
todaynew 发表于 2014-12-29 16:18
写个子程序不就完事了

sub Transition(oldtbname as string,newtbname as string)

谢谢两位给予的支持,解答
roych说的是,这个本身是可以从源头控制,但是大部分时候,是没有办法控制的,只能想办法满足需求部门的需要,再次感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-30 15:10 , Processed in 0.084180 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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