一份试卷,共5道题(包含单选和多选)
存试卷答案表如下:
表:kst;
字段:student_id(学生ID) ,testpaper_id(试卷编号ID),title_id(题目编号ID),content(学生选的答案)
数据如下:
00001,60,1,A
00001,60,2,AB
00001,60,3,C
00001,60,4,ABD
00001,60,5,B
00002,60,1,C
00002,60,2,ABC
00002,60,3,D
00002,60,4,A
00002,60,5,BD
00003,60,1,D
00003,60,2,ABC
00003,60,3,AD
00003,60,4,A
00003,60,5,C 表:ksnr
字段:testpaper_id(试卷编号ID) ,title_id(题目编号ID),result_id(供选择的答案ID),result_name(供选择的答案)数据如下:
60,1,1,A.答案
60,1,2,B.答案
60,1,3,C.答案
60,1,4,D.答案
60,2,1,A.答案
60,2,2,B.答案
60,2,3,C.答案
60,2,4,D.答案
60,3,1,A.答案
60,3,2,B.答案
60,3,3,C.答案
60,3,4,D.答案
60,3,5,E.答案 并且:kst.testpaper_id = ksnr.testpaper_id kst.title_id = ksnr.title_id
怎么写SQL 统计每道题,选A答案的有多少人,选B答案的有多少人,选C答案的有多少人,,选D答案的有多少人呢
-------------------- ------------ ---------- --------------------
00001 60 1 A
00001 60 2 AB
00001 60 3 C
00001 60 4 ABD
00001 60 5 B
00002 60 1 C
00002 60 2 ABC
00002 60 3 D
00002 60 4 A
00002 60 5 BD
00003 60 1 D
00003 60 2 ABC
00003 60 3 AD
00003 60 4 A
00003 60 5 C已选择15行。OPER@tl> select * from test2;TESTPAPER_ID TITLE_ID RESULT_ID RESULT_NAME
------------ ---------- ---------- --------------------
60 1 1 A.答案
60 1 2 B.答案
60 1 3 C.答案
60 1 4 D.答案
60 2 1 A.答案
60 2 2 B.答案
60 2 3 C.答案
60 2 4 D.答案
60 3 1 A.答案
60 3 2 B.答案
60 3 3 C.答案
60 3 4 D.答案
60 3 5 E.答案
60 4 1 A.答案
60 4 2 B.答案
60 4 3 C.答案
60 4 4 D.答案
60 5 1 A.答案
60 5 2 B.答案
60 5 3 C.答案
60 5 4 D.答案已选择21行。OPER@tl> select b.title_id,decode(b.result_id,1,'A',2,'B',3,'C',4,'D',5,'E'),
2 sum(decode(instr(a.content,substr(b.result_name,1,1)),0,0,1)) cnt
3 from test2 b,test a
4 where a.testpaper_id=b.testpaper_id
5 and a.title_id=b.title_id
6 group by b.title_id,b.result_id
7 order by b.title_id,b.result_id; TITLE_ID DE CNT
---------- -- ----------
1 A 1
1 B 0
1 C 1
1 D 1
2 A 3
2 B 3
2 C 2
2 D 0
3 A 1
3 B 0
3 C 1
3 D 2
3 E 0
4 A 3
4 B 1
4 C 0
4 D 1
5 A 0
5 B 2
5 C 1
5 D 1已选择21行。OPER@tl>
TITLE_ID DE CNT
---------- -- ----------
1 A 1
1 B 0
1 C 1
1 D 1
而是:
TITLE_ID DE CNT
---------- -- ----------
1 A.答案 1
1 B.答案 0
1 C.答案 1
1 D.答案 1
TITLE_ID DE CNT
---------- -- ----------
1 A.答案 1
1 B.答案 0
1 C.答案 1
1 D.答案 1
这样吗?
你把select中的decode(b.result_id,1,'A',2,'B',3,'C',4,'D',5,'E')改成RESULT_NAME不就行了?
SELECT B.TITLE_ID,
B.RESULT_NAME,
SUM(DECODE(INSTR(A.CONTENT, SUBSTR(B.RESULT_NAME, 1, 1)), 0, 0, 1)) CNT
FROM TEST2 B, TEST A
WHERE A.TESTPAPER_ID = B.TESTPAPER_ID
AND A.TITLE_ID = B.TITLE_ID
GROUP BY B.TITLE_ID, B.RESULT_NAME
ORDER BY B.TITLE_ID, B.RESULT_NAME;