主题:表的格式转换
lianyan99
[专家分:0] 发布于 2009-11-05 15:58:00
如何实现以下两表的转换
表一:
人名 科目名称 成绩
A 123 90
A 122 80
B 111 70
C 111 100
C 123 60
表二:
人名 科目名称1 科目1成绩 科目名称2 科目2成绩
A 123 90 122 80
B 111 70
C 111 100 123 60
表一到表二,表二到表一,请问代码如何实现。
回复列表 (共5个回复)
沙发
Vii [专家分:1130] 发布于 2009-11-05 16:04:00
123又在科目名称1里同时有在科目名称2里啊?
板凳
lianyan99 [专家分:0] 发布于 2009-11-05 16:59:00
事实上《科目名称2》的可理解成《科目2》,该字段的内容可以使数学,语文,化学等。
如某学生考了数学和语文,那么科目名称1为数学,科目名称2语文。
如某学生考了语文和化学,那么科目名称1为语文,科目名称2化学。
3 楼
sywzs [专家分:5650] 发布于 2009-11-06 09:28:00
为何不把数学,语文,化学等直接设置成表二的字段名呢?按照楼主的设计,表二的数据岂不是显得很乱吗?也不便于统计和筛选。
4 楼
lianyan99 [专家分:0] 发布于 2009-11-06 15:58:00
[size=5][size=4]我是这样考虑的:
我的科目名称较多(30种以上),而每个人只可能考2-6种,所以我不把每个考试名称单独列一个字段,而是笼统的科目名称1....科目名称6。[/size][/size]
5 楼
sywzs [专家分:5650] 发布于 2009-11-08 06:38:00
*表2的结构 "人名、科目1、成绩1、科目2、成绩2、科目3、成绩3...."
CLOSE TABLES
USE 表2 IN 2
USE 表1 IN 1
SELECT 表1
INDEX on 人名 TO rmsy
GO TOP
rm=人名
INSERT INTO 表2(人名) VALUES (rm)
I=1
DO WHILE !EOF()
IF 人名=rm
zd1="科目"+ALLTRIM(STR(I))
sj1=科目名称
zd2="成绩"+ALLTRIM(STR(I))
sj2=成绩
REPLACE &zd1 WITH sj1,&zd2 WITH sj2 IN 表2
I=I+1
SKIP
ELSE
rm=人名
INSERT INTO 表2(人名) VALUES (rm)
I=1
ENDIF
ENDDO
我来回复