日期:2014-05-17  浏览次数:20561 次

求绩点成绩,请前辈指点!先感谢前辈了!
环境:sqlserver2000 +win2003
问题:想让成绩表的绩点字段设置默认值为(60分以下为0分,60及以上绩点为:(成绩-50)/10),当成绩变动后绩点也随之变动。请前辈指导!

成绩表 
学号     成绩  绩点
20050001    80    (3)
20050002     95  (4.5)
20050003   40   (0)
20050004   60   (0)

绩点要求:60分以下为0分,60及以上绩点为:(成绩-50)/10
------解决方案--------------------
建议使用视图
------解决方案--------------------

select *,case when (convert(float,成绩)-50)/10<0 then 0 else (convert(float,成绩)-50)/10 end as 绩点 from 成绩表


不知道2000能不能用,试下吧
------解决方案--------------------
引用:
建议使用视图


支持利用视图

CREATE TABLE test2

(
XH VARCHAR(20),
CJ NUMERIC
)

INSERT INTO test2
SELECT '1','50' UNION ALL
SELECT '2','60' UNION ALL
SELECT '3','13' 

GO
CREATE VIEW vt1 AS SELECT XH "学号",CJ"成绩",(CJ-50)/10 "积点"  FROM test2
GO
SELECT * FROM vt1

DROP  TABLE test2
GO
DROP  VIEW vt1
GO

------解决方案--------------------
视图是一种方法,计算列也可以做到。
create table 成绩表
(
学号 varchar(20),
成绩 decimal(10,1),
绩点 as case when isnull(成绩,0)<60 then 0 else ((成绩-50)/10) end
)


insert into 成绩表 (学号,成绩) values ('201201',50)
insert into 成绩表 (学号,成绩) values ('201202',80)
select * from 成绩表

------解决方案--------------------
create table txxx(xh varchar(10),score decimal(3,1),dot as (score-50)/3 )
------解决方案--------------------
select 学号,成绩,[绩点]=case when 成绩<60 then 0 else (成绩-50)/10 end from 表 with(nolock)

四楼的应该可以