这样的SQL语句如何写?(100分)

  • 主题发起人 主题发起人 wusikai
  • 开始时间 开始时间
W

wusikai

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中,有一个表abc,表如下:
ID NAME chengji1 chengji2 chengji3 chengji4 chengji5 total (chengji1到chengji5都是整型)
01 tom 80 90 60 80 68 NULL
02 jay 70 80 NULL NULL 61 NULL
chengji1到chengji5是一个学生的成绩,可能是0分,在数据库中显示是NULL,total是总分,要对total自动求和,就是每输一个成绩,total都会变,如果修改了某一个成绩,total要求更新,如何实现?
谢谢大家。
我用 update abc set total=chengji1+chengji2+chengji3+chengji4+chengji5
ID为01的,total在表中可以看到总分,而ID为02的,因为有NULL,所以就没有结果,还是NULL。
 
如果是Oracle数据库,你可以用NVL(chengji1, 0) + NVL(chengji2, 0)+ ...的方法来解决Null的问题,别的数据库也是一样,要判断一下,把NULL转换为0后再处理。
 
在数据字段on valid事件写代码 如果当前值不是NULL则计算一次累加计算
 
update abc set total=isnull(chengji1,0)+isnull(chengji2,0)+isnull(chengji3,0)+isnull(chengji4,0)+isnull(chengji5,0)
 
或者TOTAL字段设计为计算字段。就不用写代码了。
 
这问题很简单
1、用代码实现,直接在更新成功后面加更新语句,如 李翔鹏 所写的。
2、用触发器实现,有点大材小用了。
 
update abc set total=isnull(chengji1,0)+isnull(chengji2,0)+isnull(chengji3,0)+isnull(chengji4,0)+isnull(chengji5,0)
用这个语句不能实现自动变化,
你可以用为表创建计算字段
alter table abc
alter column total as isnull(chengji1,0)+isnull(chengji2,0)+isnull(chengji3,0)+isnull(chengji4,0)+isnull(chengji5,0)
 
楼上的是用什么数据库?还是乱说的?
MS-SQLSERVER2000不支持这样的字段啊!
 
来自:李翔鹏, 时间:2008-8-30 19:59:01, ID:3917842
update abc set total=isnull(chengji1,0)+isnull(chengji2,0)+isnull(chengji3,0)+isnull(chengji4,0)+isnull(chengji5,0)

如果是oracle数据库把isnull换成nvl
 
sql时不要忘记在数据库创建时设定整型字段默认值为0
 
别再折腾了,结贴吧。
 
多人接受答案了。
 
后退
顶部