34,593
社区成员
发帖
与我相关
我的任务
分享
IF OBJECT_ID('Question') IS NOT NULL DROP TABLE Question
CREATE TABLE SUBJECT(
SubjectID INT PRIMARY KEY IDENTITY,
SubjectName VARCHAR(1000), --题目内容
AnswerA VARCHAR(1000), --答案A
AnswerB VARCHAR(1000), --答案B
AnswerC VARCHAR(1000), --答案C
AnswerD VARCHAR(1000), --答案D
RightAnswer CHAR(4) --可以为A,也可以为ABCD等……即满足单选和多选
)
//题目表
IF OBJECT_ID('Question') IS NOT NULL DROP TABLE Question
CREATE TABLE Questions(
queID INT PRIMARY KEY IDENTITY,
queContent VARCHAR(1000) --题目内容
)
GO
//答案表
IF OBJECT_ID('ANSWERS') IS NOT NULL DROP TABLE ANSWERS
CREATE TABLE ANSWERS
(
ansID INT PRIMARY KEY IDENTITY,
ansContent VARCHAR(1000), --答案内容
isRight BIT --是否正确
)
GO
//题目答案关联表
IF OBJECT_ID('QA') IS NOT NULL DROP TABLE QA
CREATE TABLE QA(ID INT PRIMARY KEY IDENTITY,queID INT,ansID INT)
GO
--题目表
IF OBJECT_ID('Question') IS NOT NULL DROP TABLE Question
CREATE TABLE Questions(
queID INT PRIMARY KEY IDENTITY,
queContent VARCHAR(1000) --题目内容
)
GO
--答案表
IF OBJECT_ID('ANSWERS') IS NOT NULL DROP TABLE ANSWERS
CREATE TABLE ANSWERS
(
ansID INT PRIMARY KEY IDENTITY,
ansContent VARCHAR(1000), --答案内容
isRight BIT --是否正确
subID INT --所属题目
)
我认为你应该这么设计:
--科目表
SubjectID
SubjectName
--标准答案表
SubjectID , itemid , Answer , score1, score2 , type --itemid 为题号
1 1 A 4 0 1 --1表示单选,--2表示多选
1 2 A,B 4 2 2 --A,B表示两个答案,0,2,4表示存在三种可能的分值。
--一般来说,多选题全对得全分,少选不错选,得一半的分,错选,不选,得0分。
这样,你可以通过type为1,2来判断是多选还是单选。
--学生作答表。
studentid , SubjectID , itemid , Answer
--统计方法如下:
select m.studentid ,
sum(case when m.Answer = n.Answer then score1
when n.type = 2 and charindex(m.Answer ,n.Answer) > 0 and m.Answer <> n.Answer then score2
else 0 end)
from 学生作答表 m, 标准答案表 n
where m.SubjectID = n.SubjectID and m.itemid = n.itemid
group by m.studentid
--如果需要科目名称,再连接科目表
select m.studentid , p.SubjectName,
sum(case when m.Answer = n.Answer then score1
when n.type = 2 and charindex(m.Answer ,n.Answer) > 0 and m.Answer <> n.Answer then score2
else 0 end)
from 学生作答表 m, 标准答案表 n,科目表 p
where m.SubjectID = n.SubjectID and m.itemid = n.itemid and m.SubjectID = p.SubjectID
group by m.studentid,p.SubjectName
--科目表
SubjectID
SubjectName
--标准答案表
SubjectID , itemid , Answer , score1, score2 , type
1 1 A 4 0 1 --1表示单选,--2表示多选
1 2 A,B 4 2 2 --A,B表示两个答案,0,2,4表示存在三种可能的分值。
--一般来说,多选题全对得全分,少选不错选,得一半的分,错选,不选,得0分。
这样,你可以通过type为1,2来判断是多选还是单选。