大家帮忙看个数据库问题:先谢了。
sql语句 能不能找到数据所对的字段?
比如(课程后面是所在班级此课程的总分,
     score1是course1的所有分之和)
表1:
course1 score1 course2 score2 course3 score3  classid
语文     0     数学     0      英语      0    计算机1
物理     0     化学     0      生物      0    计算机2
表2:
studentid    course  score 
 2002001      语文    60 
表3:
studentid classid
2002001    计算机1
现在操作是这样的:在表2增加一条记录如上,然后在表1
里面跟着修改班级语文课程的分数。
问题是:我怎么根据course就知道修改哪个score  
也就是说我加的记录是语文,我怎么根据语文来确定是修改表一中的score1还是score2
另外:这表设计是不是有问题?

解决方案 »

  1.   

    表的设计有问题...表1:
    CourseID CourseName 表2:
    StudentId    CourseID  Score 表3:
    StudentId ClassId
      

  2.   

    这样的表结构不太方便操作的实现语句也有的
    在sql语句中需要使用case来得到,你需要case course1 when ‘’ then case course2 when ‘’ then
    使用这样的语句来对数据进行操作
    很不爽的
    如果直接使用一条语句进行操作,好像比较困难,需要借助存储过程,或者你把记录取得后在程序中处理完了,整条的update到db中
      

  3.   

    表有问题我也没办法 ,不能改表啊!表不是我建的
    存储过程也可以啊 但是好象case也不好操作 
    就是给你个course 你得到的是字段的值啊
    怎么判断它是sourse1字段呢呢? 不知道我将清楚没有!
      

  4.   

    我的做法,但是根本就不对,我也晓得 ,帮我看看
    create proc add_score_update_course
    (
    @studentid nvarchar(20),
    @course nvarchar(10),
    @score float
    )
    as
    begin transaction
    insert into test_score(studentid,course,score) 
    values (studentid=@studentid,course=@course,score=@score);
    update test_course  
    case course1 then score1=score1+@score
    case course2 then score2=score2+@score
    case course3 then score3=score3+@score
    else score4=score4+@score
    where classid in (select classid from test_class where studentid=@studentid);
    end;
      

  5.   

    //*****使用存储过程
    Create Proc Proc_StudentChengJI
    (
       @UserCode varchar(30),
       @ChengJI float(8)
    )
    as
    --更新表一
    UPDATE 表1 SET CHENGJI=@CHENGJI WHERE USERCODE=@USERCODE
    --更新表二
    UPDATE 表2 SET CHENGJI=@CHENGJI WHERE USERCODE=@USERCODE
    //*****第二种方法是用触法器.
      

  6.   

    我想用存储过程,增加一条到表2,然后更新表1 ,
    谁帮我实现case希望通过course选对应的score
      

  7.   

    Create proc proc_Moduble_Insert
    (
       @ID uniqueidentifier,
       @chengji int
    )
    as
    insert 表1(id,chengji) values (@id,chengji)
    update 表2 set chengji=@chengji where id=@id
    update 表3 set chengji=@chengji where id=@id
      

  8.   

    case的写法可能是我写的不对,主要是想说case是可以的
    比如你要更新的是语文 那么你写
    case course1 when ‘语文’ then score1 = ... ,case course2 when ‘语文’ then score2 = 
    就这样,如果你要更新其他的,你就把语文这个值换成你要更新的,这个应该是个变量,程序控制传入的吧
      

  9.   

    --当增加记录时
    DECLARE @src VARCHAR(10)
    SELECT @src=RTRIM(src) FROM
    (SELECT course1,score1,scr=1 FROM tb1
    UNION
    SELECT course2,score2,scr=2 FROM tb1
    UNION
    SELECT course3,score3,scr=3 FROM tb1) base
    WHERE course1='语文'  --是不是语文根具你增加的记录来决定
    DECLARE @score INT
    --@score代表那个新增记录的分值,具体是你用变量取来还是在触发器中用连接获取,这个看你具体情况,我这里暂以变量代,主要为提供一个完整思路
    EXEC ('UPDATE tb1 SET score'+RTRIM(@src)+'=score'+RTRIM(@src)+'+RTRIM(@score)+' WHERE course' + RTRIM(@src) + '=''语文''')当然,是用触发器还是用存储过程在特定时调用,看你具体要求.
    没测试,可能有手误.
      

  10.   

    楼上是通过 course score后面那个数字来取得联系 然后更新的吗?
    这好象可以 ,研究ing . 谢谢fcuandy(边打魔兽边回贴)
      

  11.   

    看这条语句就应该明白了SELECT course1,score1,scr=1 FROM tb1
    UNION
    SELECT course2,score2,scr=2 FROM tb1
    UNION
    SELECT course3,score3,scr=3 FROM tb1实际上它已经把表结构转换了, 并且 src列记录了 新产生的记录原来在表中排布的位置
      

  12.   

    首先"语文"是个变量 --->得到表1里面的score
    比如 语文在表1是course1 -->所以对应 score1
    而 如果语文在表1是course2 -->对应的必须是score2
    第一步:我要增加表记录在表2  这很好实现
    第二步:在表一做出相应更改 难点在动态找course对应的score
    你们回帖  我都看了 首先感谢各位帮忙
    但还是没实现我的要求 fcuandy(边打魔兽边回贴)很接近 
    但还是要改进 ,我自己也在参照着做.