权限表
答题者  有权打分人
A           甲|丙
B           乙题目表  答题者与权限表答题者对应
题目号 题目内容 答题者
1        xx       A
2        xx       A
3        xx       A
4        xx       B
成绩表 题目号与题目表题目号对应
成绩号 题目号 题目成绩   
1       1       5
2       2       5
3       3       5
4       4       1
当用户甲或者丙进入后
得到结果集
答题者 总分
A      15
当用户乙进入后
怎样得到结果集
答题者 总分
B      1

解决方案 »

  1.   

    --> 测试数据: @题目表
    declare @题目表 table (题目号 int,题目内容 varchar(2),答题者 varchar(1))
    insert into @题目表
    select 1,'xx','A' union all
    select 2,'xx','A' union all
    select 3,'xx','A' union all
    select 4,'xx','B'
    --> 测试数据: @成绩表
    declare @成绩表 table (成绩号 int,题目号 int,题目成绩 int)
    insert into @成绩表
    select 1,1,5 union all
    select 2,2,5 union all
    select 3,3,5 union all
    select 4,4,1
    --> 测试数据: @权限表
    declare @权限表 table (答题者 varchar(1),有权打分人 varchar(8))
    insert into @权限表
    select 'A','甲|丙' union all
    select 'B','乙'
    select a.答题者,
           sum(b.题目成绩)题目成绩
    from @题目表 a,@成绩表 b,@权限表 c
    where a.题目号=b.题目号 and a.答题者=c.答题者
    group by a.答题者
    /*
    答题者  题目成绩
    ---- -----------
    A    15
    B    1(2 行受影响)
    */
      

  2.   

    SELECT [姓名]=A.答题者,[总分]=SUM(B.题目成绩)
    FROM 题目表 A
    INNER JOIN 成绩表  B ON A.题目号 = B.题目号
    INNER JOIN 权限表  C ON C.答题者 = A.答题者
    WHERE C.答题者 = '乙'
    GROUP BY A.答题者
    ORDER BY A.答题者 ASC