我有 4 个表,例如: 1) tbl_subjects
+----+------+-------------------+
| id | C_Id | subject |
+----+------+-------------------+
| 1 | 13 | తెలుగు |
| 2 | 13 | हिन्दी |
| 3 | 13 | ENGLISH |
| 4 | 13 | MATHEMATICS |
| 5 | 13 | PHYSICAL SCIENCES |
| 6 | 13 | BIOLOGY |
| 7 | 13 | SOCIAL STUDIES |
+----+------+-------------------+
2) tbl_masterexam
+------+-----+--------------------+
| exid | Cid | exnm |
+------+-----+--------------------+
| 64 | 13 | Unit Test-1 |
| 65 | 13 | Unit Test-2 |
| 66 | 13 | Quarterly Exams |
| 67 | 13 | Unit Test-3 |
| 68 | 13 | Half yearly Exams |
| 69 | 13 | Unit Test-4 |
| 70 | 13 | Pre - Public Exams |
+------+-----+--------------------+
3) tbl_cmarks
+-----+--------+--------+-------+-------+-------+
| Cid | Examid | rollno | subId | Marks | paper |
+-----+--------+--------+-------+-------+-------+
| 13 | 64 | 1 | 3 | 21 | 1 |
| 13 | 64 | 1 | 1 | 18 | 1 |
| 13 | 64 | 1 | 2 | 20 | 1 |
| 13 | 64 | 1 | 4 | 23 | 1 |
| 13 | 64 | 1 | 5 | 11 | 1 |
| 13 | 64 | 1 | 6 | 11 | 1 |
| 13 | 64 | 1 | 7 | 22 | 1 |
| 13 | 65 | 1 | 3 | 20 | 1 |
| 13 | 65 | 1 | 1 | 20 | 1 |
| 13 | 65 | 1 | 2 | 19 | 1 |
| 13 | 65 | 1 | 4 | 22 | 1 |
| 13 | 65 | 1 | 5 | 10 | 1 |
| 13 | 65 | 1 | 6 | 10 | 1 |
| 13 | 65 | 1 | 7 | 20 | 1 |
| 13 | 65 | 1 | 7 | 20 | 1 |
| 13 | 66 | 1 | 1 | 75 | 1 |
| 13 | 66 | 1 | 2 | 89 | 1 |
| 13 | 66 | 1 | 4 | 80 | 1 |
| 13 | 66 | 1 | 5 | 45 | 1 |
| 13 | 66 | 1 | 6 | 42 | 1 |
| 13 | 66 | 1 | 7 | 89 | 1 |
| 13 | 68 | 1 | 3 | 41 | 2 |
| 13 | 68 | 1 | 3 | 35 | 3 |
| 13 | 68 | 1 | 4 | 40 | 2 |
| 13 | 68 | 1 | 4 | 45 | 3 |
| 13 | 66 | 1 | 3 | 40 | 2 |
| 13 | 66 | 1 | 3 | 41 | 3 |
| 13 | 67 | 1 | 3 | 16 | 1 |
| 13 | 67 | 1 | 1 | 19 | 1 |
| 13 | 67 | 1 | 4 | 20 | 1 |
| 13 | 67 | 1 | 5 | 10 | 1 |
| 13 | 67 | 1 | 6 | 10 | 1 |
| 13 | 67 | 1 | 7 | 20 | 1 |
| 13 | 68 | 1 | 1 | 45 | 2 |
| 13 | 68 | 1 | 1 | 40 | 3 |
| 13 | 68 | 1 | 2 | 75 | 1 |
| 13 | 68 | 1 | 5 | 40 | 1 |
| 13 | 68 | 1 | 6 | 42 | 1 |
| 13 | 68 | 1 | 7 | 40 | 2 |
| 13 | 68 | 1 | 7 | 40 | 3 |
| 13 | 69 | 1 | 3 | 19 | 1 |
| 13 | 69 | 1 | 1 | 19 | 1 |
| 13 | 69 | 1 | 2 | 18 | 1 |
| 13 | 69 | 1 | 4 | 20 | 1 |
| 13 | 69 | 1 | 5 | 12 | 1 |
| 13 | 69 | 1 | 6 | 11 | 1 |
| 13 | 69 | 1 | 7 | 15 | 1 |
+-----+--------+--------+-------+-------+-------+
4) tbl_exam
+-------+-----+-------+-----+------+
| class | sid | paper | MaM | ExId |
+-------+-----+-------+-----+------+
| 13 | 3 | 1 | 25 | 64 |
| 13 | 1 | 1 | 25 | 64 |
| 13 | 2 | 1 | 25 | 64 |
| 13 | 4 | 1 | 25 | 64 |
| 13 | 5 | 1 | 13 | 64 |
| 13 | 6 | 1 | 12 | 64 |
| 13 | 7 | 1 | 25 | 64 |
| 13 | 3 | 1 | 25 | 65 |
| 13 | 1 | 1 | 25 | 65 |
| 13 | 2 | 1 | 25 | 65 |
| 13 | 4 | 1 | 25 | 65 |
| 13 | 5 | 1 | 13 | 65 |
| 13 | 6 | 1 | 12 | 65 |
| 13 | 7 | 1 | 25 | 65 |
| 13 | 3 | 2 | 50 | 66 |
| 13 | 1 | 1 | 100 | 66 |
| 13 | 2 | 1 | 100 | 66 |
| 13 | 4 | 1 | 100 | 66 |
| 13 | 5 | 1 | 50 | 66 |
| 13 | 6 | 1 | 50 | 66 |
| 13 | 7 | 1 | 100 | 66 |
| 13 | 3 | 1 | 25 | 67 |
| 13 | 1 | 1 | 25 | 67 |
| 13 | 2 | 1 | 25 | 67 |
| 13 | 4 | 1 | 25 | 67 |
| 13 | 5 | 1 | 13 | 67 |
| 13 | 6 | 1 | 12 | 67 |
| 13 | 7 | 1 | 25 | 67 |
| 13 | 3 | 2 | 50 | 68 |
| 13 | 3 | 3 | 50 | 68 |
| 13 | 1 | 2 | 50 | 68 |
| 13 | 1 | 3 | 50 | 68 |
| 13 | 2 | 1 | 100 | 68 |
| 13 | 4 | 2 | 50 | 68 |
| 13 | 4 | 3 | 50 | 68 |
| 13 | 5 | 1 | 50 | 68 |
| 13 | 6 | 1 | 50 | 68 |
| 13 | 7 | 2 | 50 | 68 |
| 13 | 7 | 3 | 50 | 68 |
| 13 | 3 | 1 | 25 | 69 |
| 13 | 1 | 1 | 25 | 69 |
| 13 | 2 | 1 | 25 | 69 |
| 13 | 4 | 1 | 25 | 69 |
| 13 | 5 | 1 | 13 | 69 |
| 13 | 6 | 1 | 12 | 69 |
| 13 | 7 | 1 | 25 | 69 |
| 13 | 3 | 3 | 50 | 66 |
+-------+-----+-------+-----+------+
我编写了一个 sql 代码来生成这样的输出:
SELECT
ts.subject as 'SUBJECT',
tme.exnm as 'EXAM',
tc.Marks as 'MARKS',
tc.paper as 'PAPER'
FROM
tbl_cmarks tc,
tbl_subjects ts,
tbl_masterexam tme
WHERE tc.rollno = 1 AND
ts.id = tc.subId AND
tme.exid = tc.Examid
它产生这样的输出:
+-------------------+-------------------+-------+-------+
| SUBJECT | EXAM | MARKS | PAPER |
+-------------------+-------------------+-------+-------+
| ENGLISH | Unit Test-1 | 21 | 1 |
| తెలుగు | Unit Test-1 | 18 | 1 |
| हिन्दी | Unit Test-1 | 20 | 1 |
| MATHEMATICS | Unit Test-1 | 23 | 1 |
| PHYSICAL SCIENCES | Unit Test-1 | 11 | 1 |
| BIOLOGY | Unit Test-1 | 11 | 1 |
| SOCIAL STUDIES | Unit Test-1 | 22 | 1 |
| ENGLISH | Unit Test-2 | 20 | 1 |
| తెలుగు | Unit Test-2 | 20 | 1 |
| हिन्दी | Unit Test-2 | 19 | 1 |
| MATHEMATICS | Unit Test-2 | 22 | 1 |
| PHYSICAL SCIENCES | Unit Test-2 | 10 | 1 |
| BIOLOGY | Unit Test-2 | 10 | 1 |
| SOCIAL STUDIES | Unit Test-2 | 20 | 1 |
| SOCIAL STUDIES | Unit Test-2 | 20 | 1 |
| తెలుగు | Quarterly Exams | 75 | 1 |
| हिन्दी | Quarterly Exams | 89 | 1 |
| MATHEMATICS | Quarterly Exams | 80 | 1 |
| PHYSICAL SCIENCES | Quarterly Exams | 45 | 1 |
| BIOLOGY | Quarterly Exams | 42 | 1 |
| SOCIAL STUDIES | Quarterly Exams | 89 | 1 |
| ENGLISH | Half yearly Exams | 41 | 2 |
| ENGLISH | Half yearly Exams | 35 | 3 |
| MATHEMATICS | Half yearly Exams | 40 | 2 |
| MATHEMATICS | Half yearly Exams | 45 | 3 |
| ENGLISH | Quarterly Exams | 40 | 2 |
| ENGLISH | Quarterly Exams | 41 | 3 |
| ENGLISH | Unit Test-3 | 16 | 1 |
| తెలుగు | Unit Test-3 | 19 | 1 |
| MATHEMATICS | Unit Test-3 | 20 | 1 |
| PHYSICAL SCIENCES | Unit Test-3 | 10 | 1 |
| BIOLOGY | Unit Test-3 | 10 | 1 |
| SOCIAL STUDIES | Unit Test-3 | 20 | 1 |
| తెలుగు | Half yearly Exams | 45 | 2 |
| తెలుగు | Half yearly Exams | 40 | 3 |
| हिन्दी | Half yearly Exams | 75 | 1 |
| PHYSICAL SCIENCES | Half yearly Exams | 40 | 1 |
| BIOLOGY | Half yearly Exams | 42 | 1 |
| SOCIAL STUDIES | Half yearly Exams | 40 | 2 |
| SOCIAL STUDIES | Half yearly Exams | 40 | 3 |
| ENGLISH | Unit Test-4 | 19 | 1 |
| తెలుగు | Unit Test-4 | 19 | 1 |
| हिन्दी | Unit Test-4 | 18 | 1 |
| MATHEMATICS | Unit Test-4 | 20 | 1 |
| PHYSICAL SCIENCES | Unit Test-4 | 12 | 1 |
| BIOLOGY | Unit Test-4 | 11 | 1 |
| SOCIAL STUDIES | Unit Test-4 | 15 | 1 |
+-------------------+-------------------+-------+-------+
但我想将结果显示为:
+-------------------+---------+---------+---------+---------+---------+---------+
| | U.T-1 | U.T-2 | Quart | U.T-3 | Half | U.T-4 |
+-------------------+---------+---------+---------+---------+---------+---------+
| SUBJECT | M Max G | M Max G | M Max G | M Max G | M Max G | M Max G |
| ENGLISH | 21 25 A | 21 25 A | 40,45 50,50 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| తెలుగు | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| हिन्दी | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| MATHEMATICS | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| PHYSICAL SCIENCES | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| BIOLOGY | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
| SOCIAL STUDIES | 21 25 A | 21 25 A | 85 100 A | 21 25 A | 45,40 50,50 A | 21 25 A |
+-------------------+---------+---------+---------+---------+---------+---------+
请任何人告诉我应该在哪里更改我的查询以重现所需的结果
我试过 GROUP_CONCAT(exnm) 但我无法得到想要的结果。请告诉我/给我一个想法来编写代码以像这样显示。
谢谢你。
为了显示成绩,我创建了一个这样的函数
DELIMITER $$
CREATE FUNCTION `ShowGrade`(val FLOAT(10,2)) RETURNS text CHARSET latin1
BEGIN
DEClARE p FLOAT(10,2);
DEClARE g TEXT;
set p=val;
IF p>=91 and p<=100 THEN
set g= "A+";
END IF;
IF p>=71 and p<=90 THEN
set g= "A";
END IF;
IF p>=51 and p<=70 THEN
set g= "B+";
END IF;
IF p>=41 and p<=50 THEN
set g= "B";
END IF;
IF p>=0 and p<=40 THEN
set g= "C";
END IF;
return g;
END
最后我写了一个 sql 代码来显示一些部分结果。
set session group_concat_max_len= 100000;
SET @sql = NULL;
SET @sql1=NULL;
SELECT GROUP_CONCAT(
CONCAT('MAX(CASE WHEN examid = ''', exid,
''' and m.paper=1 THEN marks END) `',CONCAT(exnm,'p-1'), '`,
MAX(CASE WHEN examid = ''', exid,''' and m.paper=2 THEN marks END) `',CONCAT(exnm,'p-2'), '`,
MAX(CASE WHEN examid = ''', exid,''' and m.paper=3 THEN marks END) `',CONCAT(exnm,'p-3'), '`'))
INTO @sql FROM tbl_masterexam WHERE cid = 13;
SELECT GROUP_CONCAT(
CONCAT('MAX(CASE WHEN examid = ''', te.exid,''' and te.paper=1 THEN MaM END) `',CONCAT(exnm,'p-1'), '`,
MAX(CASE WHEN examid = ''', te.exid,
''' and te.paper=2 THEN MaM END) `',CONCAT(exnm,'p-2'), '`,
MAX(CASE WHEN examid = ''', te.exid,
''' and te.paper=3 THEN MaM END) `',CONCAT(exnm,'p-3'), '`'))
INTO @sql1
FROM tbl_exam te JOIN tbl_masterexam tme On tme.exid=te.ExId
WHERE te.class = 13 AND tme.Cid=13;
SET @sql = CONCAT('SELECT s.subject,', @sql,',',@sql1,'
FROM tbl_cmarks m JOIN tbl_subjects s ON m.subid = s.id
JOIN tbl_exam te On te.sid = s.id AND te.ExId=m.Examid WHERE m.rollno = 1 AND m.cid = 13 AND te.class=13 GROUP BY m.subid,s.subject');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
通过执行上述代码,我能够正确获取标记,但 MaM(Max Marks)列值每次重复 7 次,并且我想显示 P-1、P-2、P-3 的结果,如单列以逗号分隔,如上图所需结果所示。
任何人都可以帮助我/给我一个提示,以准确地显示我所期望的结果。