首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

一个表的转置怎么编程

2012-03-13 
请教各位一个表的转置如何编程。菜鸟请教一个dbf表的转置如何编程,谢谢。有dbf表: 考号科目等级100101210010

请教各位一个表的转置如何编程。
菜鸟请教一个dbf表的转置如何编程,谢谢。

有dbf表: 考号 科目 等级

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


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

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

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

请给出大致程序编写或思路,谢谢~~~~

[解决办法]
1、先用这样的语句得到科目数组kmarr
SELECT distinct 科目 FROM 源表名 INTO ARRAY kmarr
2、用kmnum=ALEN(kmArr)函数取得科目数目
3、用FOR循环建立目标表,大致如下
create table desttable (考号,C(9)) &&建立目标表
for i=1 to kmnum
curfield='科目'+kmarr(i)+'等级' &&当前要增加的字段名
alter table desttable add column &curfield C(1) &&修改表,增加“科目01等级”这样的字段
endfor
4、好了,现在目标表建立好了,再用类似1的办法建立考号的数组
5、现在进行一个FOR循环的嵌套,外层是学号,内层是科目,把查到的等级填入目标表就是了


[解决办法]
SELECT 科目 FROM tdbf GROUP BY 科目 INTO CURSOR dd
SELECT dd
ff=""
SCAN
ff=ff+'max(IIF(科目="'+ALLTRIM(科目)+'",等级,0))'+","
ENDSCAN 
ff='select 考号,'+LEFT(ff,LEN(ff)-1)+' from tdbf group by 考号'
?ff
&ff

[解决办法]
Create Cursor T1 (考号 C(10),科目 C(10),等级 I)
Insert Into T1 Values ('1001','01',2)
Insert Into T1 Values ('1001','02',3)
Insert Into T1 Values ('1001','03',1)
Insert Into T1 Values ('1002','01',1)
Insert Into T1 Values ('1002','03',2)
Insert Into T1 Values ('1002','02',3)
*-- 以上生成测试数据,这里假设你的原表名为 T1

Select 科目 Into Cursor TMP From T1 Group By 科目
Select TMP
lcStr=""
Scan
lcStr=lcStr+'Max(Iif(科目="'+Alltrim(科目)+'",等级,0))'+" As 科目"+Alltrim(科目)+"等级,"
Endscan
lcStr='Select 考号,'+Left(lcStr,Len(lcStr)-1)+' Into Table 新表名 From T1 Group By 考号'
&lcStr
Browse

热点排行