| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1534 人关注过本帖, 2 人收藏
标题:菜鸟请教如何转置一个表。
只看楼主 加入收藏
ivf
Rank: 1
等 级:新手上路
帖 子:66
专家分:2
注 册:2009-3-14
结帖率:70%
收藏(2)
已结贴  问题点数:60 回复次数:7 
菜鸟请教如何转置一个表。
菜鸟请教一个dbf表的转置如何编程,谢谢。

有dbf表: 考号    科目    等级

          1001      01      2
          1001      02      3
          1001      03      1
          1002      01      2
          ……    ……    ……


如何编程程序转置成: 考号  科目01等级  科目02等级  科目03等级

                    1001    2            3        1
                    1002    2          ……      ……
                    1003  ……        ……      ……

注:每个考号对应几个科目且科目不重复。

请给出大致程序编写或思路,谢谢~~~~
 
搜索更多相关主题的帖子: 1001 编程程序 如何 
2010-03-10 21:51
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:10 
这个应该就是竖转横吧?
1.如果科目不是很多,而且固定几个的话(每个考号对应几个无所谓).可以用IIF,ICASE等直接写固定好的SQL语句.
2.如果科目很多,而且随时可能增加的话,那么这个CASE条件可以先连接为一个字符串,然后执行它,如VFP里的宏替换,SQL里的EXEC等,具体的代码参考:
https://bbs.bccn.net/viewthread.php?tid=292391&page=1#pid1700324
不完全一样,道理是一样的.

[ 本帖最后由 hgfeng1984 于 2010-3-10 22:36 编辑 ]
2010-03-10 22:34
ivf
Rank: 1
等 级:新手上路
帖 子:66
专家分:2
注 册:2009-3-14
收藏
得分:0 
回复 2楼 hgfeng1984
感谢,谢谢,我去看看。

再次表示谢意~~~
2010-03-11 09:20
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:40 
假设你的源表为: 表a, 代码如下(测试无误)~

sele dist 科目 from 表a into curs tmp
lskm =""
scan
   lsc  =padl(allt(科目),2,"0")
   lskm =lskm +padr(",'  ' 科目&lsc.等级",20)
endscan

sele dist 考号 &lskm from 表a into curs tmp readw
for kk=1 to len(lskm)/20
    lsc =subs(lskm,at("科目",lskm,kk)+4,2)
    upda tmp set 科目&lsc.等级=表a.等级 from 表a where tmp.考号=表a.考号 .and.val(表a.科目)=val(lsc)
endfor
brow noed titl " >> 考生科目等级总览~"
retu


测试结果图:
图片附件: 游客没有浏览图片的权限,请 登录注册

2010-03-11 10:52
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:10 

1.VFP有先成的交叉表生成器 VFPXTAB.prg,调用就行了(方法就不说了)
2.使用查询设计器也可以(在“杂项”中选中“交叉数据表”)。


★★★★★为人民服务★★★★★
2010-03-11 14:58
ivf
Rank: 1
等 级:新手上路
帖 子:66
专家分:2
注 册:2009-3-14
收藏
得分:0 
再次表示感谢,谢谢大家。
2010-03-11 17:34
ivf
Rank: 1
等 级:新手上路
帖 子:66
专家分:2
注 册:2009-3-14
收藏
得分:0 
以下是引用茵梦湖在2010-3-11 10:52:52的发言:

假设你的源表为: 表a, 代码如下(测试无误)~

sele dist 科目 from 表a into curs tmp
lskm =""
scan
   lsc  =padl(allt(科目),2,"0")
   lskm =lskm +padr(",'  ' 科目&lsc.等级",20)
endscan

sele dist 考号 &lsk ...
认真,详细,热心,博学,

再次感谢作者 茵梦湖!!!!
2010-03-11 17:35
ycvf
Rank: 2
等 级:论坛游民
帖 子:210
专家分:56
注 册:2012-8-25
收藏
得分:0 
以下是引用ivf在2010-3-11 09:20:17的发言:

感谢,谢谢,我去看看。

再次表示谢意~~~

sele dist 考号 &lskm from cc.dbf into curs tmp readw
程序运行时提示上面这行出错

落花人独立,微雨燕双飞。
2012-08-25 22:08
快速回复:菜鸟请教如何转置一个表。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018406 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved