回 帖 发 新 帖 刷新版面

主题:求助,删除数据表中的列项,麻烦各位了!!!

有一个数据表有四列,分别是学号、数学、语文、外语;有三组数据,学号分别是2001、2002、2003,我想把学号是2003的同学这三科成绩只要是小于60分的所在列删除。比如学号是2003同学语文成绩是55分,我要把这个表中语文字段删掉。谢谢,急!!!!!!

回复列表 (共14个回复)

沙发

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

板凳


我想把这个列都删掉,结果是这个表中没有语文这一列了。如果学号是2003的同学这三科成绩都低于60分,那么这个表就没有‘语文’‘数学’‘外语’这三列了,只剩下学号这一列了。谢谢

3 楼

ALTER TABLE 表名 DROP 语文

4 楼


可以用一个程序吗?因为上面的例子只是我随便举得,实际中有很多列需要删除,并且每次操作中删除的列还不同。谢谢

5 楼

说明你的表结构设置不合理。为什么要删除。
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 楼

如果遇到字段名长度不一,楼上的方法就不适用了。

7 楼


走一步看一步,车到山前必有路,船到桥头自然直。

8 楼

根据数据确实可以删除列,不过这种表结构的设计是不恰当的,况且楼主的列还不是固定的,更加混乱!好好学习一下数据库的理论吧

9 楼

出勤情况表
       甲    乙    丙    丁
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 楼

解决了,谢谢各位

我来回复

您尚未登录,请登录后再回复。点此登录或注册