有数据库如下:姓名 数学 语文 物理
BBB1 97 77 74
BBB2 65 76 87
BBB3 89 93 93
BBB4 83 79 74
BBB5 93 84 35
BBB6 75 56 75
BBB7 65 54 78 我想后面添加一列:为int myfunc(){int i=0;if 语文>80i++;if 数学>80i++;if 物理>80i++;return i;}请问怎么实现啊?
BBB1 97 77 74
BBB2 65 76 87
BBB3 89 93 93
BBB4 83 79 74
BBB5 93 84 35
BBB6 75 56 75
BBB7 65 54 78 我想后面添加一列:为int myfunc(){int i=0;if 语文>80i++;if 数学>80i++;if 物理>80i++;return i;}请问怎么实现啊?
set col=sum(case when 数学>80 then 1 when 语文>80 then 1 when 物理>80 then 1 else 0 end)
group by 姓名
[大于80分的科目数] = (CASE WHEN 数学>80 THEN 1 ELSE 0 END) +
(CASE WHEN 语文>80 THEN 1 ELSE 0 END) +
(CASE WHEN 物理>80 THEN 1 ELSE 0 END)
from tb
set col=myfunc()
你要 update,先得 alter table add column col int
你要自定义一个函数,那先得用 select 语句从数据库中取出数据,再到你的那个函数里去求,再用 update 语句写到数据库中去,是不是有点脱什么放什么的感觉?如果你的表中一定得有这个列,最简单的办法,就是创建一个计算列,该计算列的公式设置为:
(case when 数学 > 80 then 1 else 0 end) + (case when 语文 > 80 then 1 else 0 end) + (case when 物理 > 80 then 1 else 0 end)然后,只要你把前三列输入数据,那个等级自动就OK了!
+(case when 语文>80 then 1 else 0 end)
+(case when 物理>80 then 1 else 0 end)
from tt77
where 姓名=@name
return @col
endselect *,dbo.fun_test(姓名) col from tt77
----------------------------
BBB1 97 77 74 1
BBB2 65 76 87 1
BBB3 89 93 93 3
BBB4 83 79 74 1
BBB5 93 84 35 2
BBB6 75 56 75 0
BBB7 65 54 78 0
create table tt77 (姓名 varchar(10),数学 int, 语文 int, 物理 int)
insert into tt77 select 'BBB1', 97, 77, 74
insert into tt77 select 'BBB2', 65, 76, 87
insert into tt77 select 'BBB3', 89, 93, 93
insert into tt77 select 'BBB4', 83, 79, 74
insert into tt77 select 'BBB5', 93, 84, 35
insert into tt77 select 'BBB6', 75, 56, 75
insert into tt77 select 'BBB7', 65, 54, 78
create function fun_test(@name varchar(10))
returns int
as
begin
declare @col int
select @col=(case when 数学>80 then 1 else 0 end)
+(case when 语文>80 then 1 else 0 end)
+(case when 物理>80 then 1 else 0 end)
from tt77
where 姓名=@name
return @col
endselect *,dbo.fun_test(姓名) col from tt77
何必用函数 还是用case when 判断啊