Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

关于sql语句的难题,ACCESS里面如何实现表的行列转置?

baiqingrui  发表于:2014-06-30 12:23:38  
复制

假如有一张学生成绩表,学生人数1万名,考试科目100个。

表1  

学号  语文  数学  英语 ...     (此处100个科目)

001   90     91     92

002   93     94     95

003   96     97     98

...     ...      ...     ... 


如何把表1转为表2格式?

表2

学号  科目  成绩

001   语文  90

001   数学  91

001   英语  92

002   语文  93

002   数学  94

002   英语  95

...     ...     ...


我已请教了一些搞编程的人,只得到下面一个笨方法,:

SELECT 学号,'语文'as 科目,数学 as 成绩 FROM 表1

union
SELECT 学号,'数学'as 科目,语文 as 成绩 FROM 表1
union

SELECT 姓名,'英语'as 科目,英语 as 成绩 FROM 表1

union

...

union

....;
但是上面的办法好像有问题,union次数太多了会报错,删掉一部分才能正常运行。


我的问题:

1.上面笨办法是不是union次数太多了不行,为什么?

2.有没有更好的办法?

3.如果表2转表1用什么语句?


请各位大侠指点,感激不尽!

 

Top
在水一方 发表于:2014-07-01 10:33:11

使用“遍历字段”的方法获取字段标题和字段值,然后使用追加查询来添加记录

参考:

http://www.accessoft.com/blog/article-show.asp?userid=20576&Id=9395



baiqingrui 发表于:2014-07-01 10:34:02
难道无人能解吗,还是不屑一顾?

baiqingrui 发表于:2014-07-01 10:55:23
但是我用上面的语句不能运行,会报错。我后来把语句拆分成三个查询,分别都可以运行,但是再把三个查询通过union合并到一起又会报错。不知道是哪里的问题,有人能解吗,急!

煮江品茶 发表于:2014-07-01 10:59:24
sub 捣腾数据()
  dim rs1 as new adodb.recordset,rs2 as new adodb.recordset
  dim ssql as string
  dim i as long,j as long


  ssql="select * from 表2"
  rs1.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic


  ssql="select * from 表1"
  rs2.Open ssql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic


  for i=1 to rs2.recordcount
    for j=1 to rs2.fields.count-1
      rs1.addnew
      rs1!学号.value=rs2.fields(0).value
      rs1!科目.value=rs2.fields(j).name
      rs1!成绩.value=rs2.fields(j).value
      rs1.update
    next
    rs2.movenext
  next


  rs1.close:set rs1=nothing
  rs2.close:set rs2=nothing
end sub


baiqingrui 发表于:2014-07-09 08:39:06
测试成功,感谢煮江品茶!但是还有个小问题,就是每次执行程序会在表2里累加一次数据。如何在执行数据写入表2之前清空原来的数据,麻烦大侠指点。我不懂VB语言,最好把代码贴上来,我直接使用。

baiqingrui 发表于:2014-07-09 20:26:58
求大侠出手!

总记录:6篇  页次:1/1 9 1 :