有数据库如下:姓名 数学 语文 物理 
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;}请问怎么实现啊?

解决方案 »

  1.   

    update tb 
    set col=sum(case when 数学>80 then 1 when 语文>80 then 1 when 物理>80 then 1 else 0 end)
    group by 姓名
      

  2.   

    SELECT *,
    [大于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
      

  3.   

    SELECT *, (CASE WHEN 数学>80 THEN 1 ELSE 0 END) +(CASE WHEN 语文>80 THEN 1 ELSE 0 END) +(CASE WHEN 物理>80 THEN 1 ELSE 0 END) as 大于80分的科目数 from tb
      

  4.   

    select t.* , (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 t
      

  5.   

     大家没有理解我的意思,我不需要写sql语句,要通过函数,就是可以任意自己定义一个函数,然后再通过SQL UPDATE 语句: update tb  
    set col=myfunc()
      

  6.   


    你要 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了!
      

  7.   

    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
    ----------------------------
    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
      

  8.   


    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
      

  9.   


    何必用函数 还是用case when 判断啊