主题总数:270876
总帖数:1119824
注册会员总数:255497
今日总帖数:307
|
|
├─◆ 狼盟首页 > 查看贴子 > 详细信息
楼主
表的查询追加问题?
我的两个表如下:
表1: 学号 姓名 数学 语文 表2: 学号 姓名 数学 语文 英语
001 李 88 001 李 88 87 86
002 刘 67 002 刘 68
003 王 48 47 004 钱 28 27
表3: 学号 姓名 数学 语文 英语
001 李 88 87 86
002 刘 68 67
003 王 48 47
004 钱 28 27
我的问题是如何将表2中那些与表1不同的内容添加到表1中(而两表相同的内容不变) 成为表3的形式. (回复时能不能尽量将代码程序注释以下!!)
请高手帮助不胜感激!!!!
-
colcolcom [ 1 楼 ]
2005-08-31 23:47:00
用do while好用还不会出错,还可以进行数据转换
SELECT *;
FROM 表二;
WHERE 学号="000"; **不可能有的一个ID值,生成一个空的临时表
INTO CURSOR 表三 readwrite
select 表二
go top
do while not eof()
select 表一
go top
loca for 学号=表二.学号
if found()
a=iif(数学=表二.数学,数学,表二.数学)
b=iif(语文=表二.语文,语文,表二.语文)
c=表二.英语
else
a=表二.数学
b=表二.语文
c=表二.英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表二
skip
endo
select 表二
go top
do while not eof()
select 表一
go top
loca for 学号=表二.学号
if found()
a=iif(数学=表二.数学,数学,表二.数学)
b=iif(语文=表二.语文,语文,表二.语文)
c=表二.英语
else
a=表二.数学
b=表二.语文
c=表二.英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表二
skip
endo
select 表二
go top
do while not eof()
select 表一
go top
loca for 学号=表二.学号
if found()
a=iif(数学=表二.数学,数学,表二.数学)
b=iif(语文=表二.语文,语文,表二.语文)
c=表二.英语
else
a=表二.数学
b=表二.语文
c=表二.英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表二
skip
endo
select 表一
go top
do while not eof()
select 表二
go top
loca for 学号=表一.学号
if not found()
a=数学
b=语文
c=英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表一
skip
endo
这方法很好用就是慢了点,不过如果数据类型不相同的时候相当好用
-
colcolcom [ 2 楼 ]
2005-08-31 23:51:00
不好意思发错了
SELECT *;
FROM 表二;
WHERE 学号="000"; **不可能有的一个ID值,生成一个空的临时表
INTO CURSOR 表三 readwrite
select 表二
go top
do while not eof()
select 表一
go top
loca for 学号=表二.学号
if found()
a=iif(数学=表二.数学,数学,表二.数学)
b=iif(语文=表二.语文,语文,表二.语文)
c=表二.英语
else
a=表二.数学
b=表二.语文
c=表二.英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表二
skip
endo
select 表一
go top
do while not eof()
select 表二
go top
loca for 学号=表一.学号
if not found()
a=数学
b=语文
c=英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表一
skip
endo
这方法很好用就是慢了点,不过如果数据类型不相同的时候相当好用.要转换类型的话在转换a,b,c 的类型再向表三添加就是了,但要注意此时表三是临时表,要在最后加上导出指令将其保存才能存盘.
-
labxj0769 [ 3 楼 ]
2005-09-01 00:14:00
select * from 表1 into table 表3 &&生成新表==表1
select 表2
scan &&遍历表2
cCno=alltrim( 学号) &&取当前学号,只当唯一没重复
scatter to arrsec &&将当前记录加入数组arrsec
select* from 表3 where alltrim(学号)==cCno into array arrmain
if _TALLY=0 &&在表3中没有相同记录
select 表3
insert into 表3 from array arrsec
else &&在表3中有相同记录
for i=1 to alen(arrmain) &&循环比较记录是否相同
if vartype(arrmain[i])="N" &&为数字型
if arrmain[i]#arrsec[i] and arrsec[i]>0 &&主为70,副为40,结果变成40
arrmain[i]=arrsec[i] &&进行数据转换
endif
endif
endfor
select 表3
REPLACE FROM ARRAY arrmain all for alltrim(学号)==cCno &&按学号用改变后
的数组替换
endif
endscan
-
gwmh6691 [ 4 楼 ]
2005-09-01 07:57:00
最简单的办法是使用查询向导,然后对语句的熟悉。
-
tsfdg [ 5 楼 ]
2005-09-01 11:23:00
我按照“天涯”的方法去做了可结果只是将表2追加到表1中了,其中还包括重复记录
-
labxj0769 [ 6 楼 ]
2005-09-01 12:21:00
我上面的没看到表2多个字段,其它没问题,你将以下复制到一个PRG程序,执行查结果:
*****按你的意思创建表1
CREATE TABLE 表1 FREE ( 学号 c(10),姓名 c(10),数学 int, 语文 int)
INSERT INTO 表1 values("001","李",88,0)
INSERT INTO 表1 values("002","刘",0,67)
INSERT INTO 表1 values("003","王",48,47)
********按你的意思创建表2
CREATE TABLE 表2 FREE ( 学号 c(10),姓名 c(10),数学 int, 语文 int,英语 int)
INSERT INTO 表2 values("001","李",88,87,86)
INSERT INTO 表2 values("002","刘",68,0,0)
INSERT INTO 表2 values("004","钱",28,27,0)
select * from 表1 into table 表3 &&生成新表==表1
ALTER table 表3 ADD COLUMN 英语 int &&此处增加英语字段,以下没变
select 表2
scan &&遍历表2
cCno=alltrim( 学号) &&取当前学号,只当唯一没重复
scatter to arrsec &&将当前记录加入数组arrsec
select* from 表3 where alltrim(学号)==cCno into array arrmain
if _TALLY=0 &&在表3中没有相同记录
select 表3
insert into 表3 from array arrsec
else &&在表3中有相同记录
for i=1 to alen(arrmain) &&循环比较记录是否相同
if vartype(arrmain[i])="N" &&为数字型
if arrmain[i]#arrsec[i] and arrsec[i]>0 &&主为70,副为40,结果变成40
arrmain[i]=arrsec[i] &&进行数据转换
endif
endif
endfor
select 表3
REPLACE FROM ARRAY arrmain all for alltrim(学号)==cCno &&按学号用改变后的数组替换
endif
endscan
SELECT 表3
BROWSE
-
tsfdg [ 7 楼 ]
2005-09-03 19:53:00
还是不太好用!请再赐教!!!
-
colcolcom [ 8 楼 ]
2005-09-05 00:38:00
SELECT *;
FROM 表二;
WHERE 学号="000"; **不可能有的一个ID值,生成一个空的临时表
INTO CURSOR 表三 readwrite
select 表二
go top
do while not eof()
select 表一
go top
loca for 学号=表二.学号
if found()
a=iif(数学=表二.数学,数学,表二.数学)
b=iif(语文=表二.语文,语文,表二.语文)
c=表二.英语
else
a=表二.数学
b=表二.语文
c=表二.英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表二
skip
endo
select 表一
go top
do while not eof()
select 表二
go top
loca for 学号=表一.学号
if not found()
a=数学
b=语文
c=英语
endif
select 表三
append blank
repl 数学 with a,语言 with b,英语 with c
select
select 表一
skip
endo
用我呢方法,其缺点是浪费一点点cup的资源,不过呢决对好用,转为它用到的方法和命令是最基本的,不会出错,好理解,
|
|
| |
|
|