本人不做数据库方面开发,但要做个题,请高手指导。
学生表结构:学号(主键)姓名
成绩表结构:学好(主键1)课程号(主键2)成绩
(1)求所有同学所有课程的总分。
(2)写一个针对每个同学计算所有科目平均成绩的存储过程。
(3)构造触发器完成以下功能:当增加一个新同学时,自动在Score表中增加一个学号;当删除某个学生档案时,相应的该学生的成绩记录全部删除。
(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)另外有一个表包含书名和作者
内容:
书名   作者
book1  author1
book1  author2
写个SQL得到结果
book1 author1,author2
多谢。时间紧迫。给个结果,要分另外开帖给。系统一次只允许给100。

解决方案 »

  1.   

    --(1)求所有同学所有课程的总分。
    SELECT SUM(成绩) FROM 成绩-- 如果是按学生分的
    SELECT A.姓名, 成绩 = SUM(成绩)
    FROM 学生 A, 成绩 B
    WHERE A.学号 = B.学号
    GROUP BY A.姓名--(2)写一个针对每个同学计算所有科目平均成绩的存储过程。
    CREATE PRCO dob.p_qry
    AS
    SELECT A.姓名, 成绩 = AVG(成绩)
    FROM 学生 A, 成绩 B
    WHERE A.学号 = B.学号
    GROUP BY A.姓名--(3)构造触发器完成以下功能:当增加一个新同学时,自动在Score表中增加一个学号;
    --当删除某个学生档案时,相应的该学生的成绩记录全部删除。
    CREATE TRIGGER tr_insertdelete ON 学生
    FOR insert,delete
    AS
    INSERT 成绩(学号) SELECT 学号 FROM inserted
    DELETE A FROM 成绩 A, deleted B
    WHERE A.学号 = B.学号
    GO--(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)
    DECLARE tb CURSOR LOCAL
    FOR
    SELECT 课程号, 成绩
    FROM 学生 A, 成绩 B
    WHERE A.学号 = B.学号
    AND A.姓名 = '李斯'
    OPEN tb
    FETCH tb
    WHILE @@FETCH_STATUS = 0
    FETCH tb
    CLOSE tb
    DEALLOCATE tb
      

  2.   

    1.不是很明白,难道是 select sum(成绩) from 成绩表
    2. select 学号,sum(成绩)/3.0 as 平均分 from 成绩表 group by 学号
    3.有点疑问,成绩表中(课程号是key),那怎么能只增加个学号呢?
    4.为什么要用游标呢?
       select A.姓名,B.课程号,B.成绩 from 学生表 A,成绩表 B 
       where A.学号=B.学号 and A.姓名='李斯'
      

  3.   

    厉害,难怪是砖石级别!
    另外有一个表包含书名和作者
    内容:
    书名   作者
    book1  author1
    book1  author2
    book2  author3写个SQL得到结果
    book1 author1,author2
    book2 author3
    我不知道把两个作者名字怎么组合啊
      

  4.   

    --很常见的方法!
    create table 表(书名 varchar(20),作者 varchar(20))
    insert into 表 select 'book1','author1'
    insert into 表 select 'book1','author2'
    insert into 表 select 'book2','author1'
     
    go
    --创建用户定义函数
    create function f_str(@Bookname varchar(20))
    returns varchar(8000)
    as
    begin
        declare @ret varchar(8000)
        set @ret = ''
        select @ret = @ret+','+作者 from 表 where 书名 = @Bookname
        set @ret = stuff(@ret,1,1,'')
        return @ret 
    end
    go
    --执行
    select 书名,作者=dbo.f_str(书名) from 表 group by 书名 order by 书名
      

  5.   

    --(4)写一个完整的游标程序,用来提取李斯各门课程的成绩。(SQL语法)
    DECLARE tb CURSOR LOCAL
    FOR
    SELECT 课程号, 成绩
    FROM 学生 A, 成绩 B
    WHERE A.学号 = B.学号
    AND A.姓名 = '李斯'
    OPEN tb
    FETCH tb
    WHILE @@FETCH_STATUS = 0
    FETCH tb
    CLOSE tb
    DEALLOCATE tb游标循环好像应该是 FETCH NEXT FROM tb