主题:求助,删除数据表中的列项,麻烦各位了!!!
y2006wf
[专家分:0] 发布于 2012-06-12 16:16:00
有一个数据表有四列,分别是学号、数学、语文、外语;有三组数据,学号分别是2001、2002、2003,我想把学号是2003的同学这三科成绩只要是小于60分的所在列删除。比如学号是2003同学语文成绩是55分,我要把这个表中语文字段删掉。谢谢,急!!!!!!
回复列表 (共14个回复)
沙发
sdta [专家分:570] 发布于 2012-06-12 17:04:00
CREATE CURSOR TABNAME (学号 C(4),语文 N(3),数学 N(3),英语 N(3))
INSERT INTO TABNAME VALUES ("2001",85,79,60)
INSERT INTO TABNAME VALUES ("2002",87,57,68)
INSERT INTO TABNAME VALUES ("2003",55,71,76)
SCAN
FOR I=1 TO FCOUNT()
MYFIELD=FIELD(I)
IF TYPE(MYFIELD)='N'
BLANK FIELDS &MYFIELD FOR &MYFIELD<60
ENDIF
ENDFOR
ENDSCAN
BROWSE
板凳
y2006wf [专家分:0] 发布于 2012-06-12 17:32:00
我想把这个列都删掉,结果是这个表中没有语文这一列了。如果学号是2003的同学这三科成绩都低于60分,那么这个表就没有‘语文’‘数学’‘外语’这三列了,只剩下学号这一列了。谢谢
3 楼
sdta [专家分:570] 发布于 2012-06-12 17:43:00
ALTER TABLE 表名 DROP 语文
4 楼
y2006wf [专家分:0] 发布于 2012-06-12 17:47:00
可以用一个程序吗?因为上面的例子只是我随便举得,实际中有很多列需要删除,并且每次操作中删除的列还不同。谢谢
5 楼
sdta [专家分:570] 发布于 2012-06-12 18:03:00
说明你的表结构设置不合理。为什么要删除。
CREATE CURSOR TABNAME (学号 C(4),语文 N(3),数学 N(3),英语 N(3))
INSERT INTO TABNAME VALUES ("2001",85,79,60)
INSERT INTO TABNAME VALUES ("2002",87,57,68)
INSERT INTO TABNAME VALUES ("2003",55,71,76)
LOCAL KM
KM=""
SCAN
FOR I=1 TO FCOUNT()
MYFIELD=FIELD(I)
IF TYPE(MYFIELD)='N'
IF &MYFIELD<60
KM=KM+MYFIELD
ENDIF
ENDIF
ENDFOR
ENDSCAN
FOR I=1 TO LEN(KM)/2 STEP 2
COLNAME=SUBSTRC(KM,1+(I-1)*2,2)
ALTER TABLE TABNAME DROP COLUMN &COLNAME
ENDFOR
BROWSE
6 楼
coffeenight [专家分:230] 发布于 2012-06-15 08:32:00
如果遇到字段名长度不一,楼上的方法就不适用了。
7 楼
sdta [专家分:570] 发布于 2012-06-16 10:28:00
走一步看一步,车到山前必有路,船到桥头自然直。
8 楼
liupeisong [专家分:2340] 发布于 2012-06-17 11:11:00
根据数据确实可以删除列,不过这种表结构的设计是不恰当的,况且楼主的列还不是固定的,更加混乱!好好学习一下数据库的理论吧
9 楼
y2006wf [专家分:0] 发布于 2012-06-18 09:11:00
出勤情况表
甲 乙 丙 丁
1日 0 1 1 1
2日 0 0 1 0
3日 0 0 0 0
4日 0 1 1 0
5日 0 0 0 0
6日 0 0 1 1
7日 0 1 0 0
8日 0 0 0 0
9日 0 1 1 0
10日 0 0 0 0
合计 0 4 5 2
注:‘0’表示缺勤,‘1’表示出勤
我想把合计为‘0’的列删除,上表中也就是把‘甲’项删掉;谢谢
10 楼
y2006wf [专家分:0] 发布于 2012-06-18 12:01:00
解决了,谢谢各位
我来回复