权限表
答题者 有权打分人
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
答题者 有权打分人
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
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 行受影响)
*/
FROM 题目表 A
INNER JOIN 成绩表 B ON A.题目号 = B.题目号
INNER JOIN 权限表 C ON C.答题者 = A.答题者
WHERE C.答题者 = '乙'
GROUP BY A.答题者
ORDER BY A.答题者 ASC