我有四张桌子,如下所示。
表:类
ClassID | ClassSTD
--------------------------------
1 | STD-1
2 | STD-2
3 | STD-3
4 | STD-4表:科
SectionId | SectionName | ClassId
--------------------------------------------
1 | sec-A | 1
2 | sec-B | 1
3 | sec-C | 1
4 | sec-A | 2
5 | sec-B | 2
6 | sec-C | 2
7 | sec-A | 3表:Subject
subjectId | subjectName
------------------------------------
1 | Art
2 | Music
3 | Play表SubjectAllocationToClass
classId | sectionID | subjectId | type
-----------------------------------------------------------------------
1(STD-1) | 1(sec-A) | 1(Art) | main
1(STD-1) | 2(sec-B) | 1(Art) | main
1(STD-1) | 3(sec-C) | 1(Art) | optional
1(STD-1) | 1(sec-A) | 2(Music) | main
1(STD-1) | 2(sec-B) | 2(Music) | optional上表"SubjectAllocationToClass“显示了类的两种主题类型(主主题和可选主题)的分布情况。
需要所有类而不分区段,subjectAllocation需要所有区段而不需要subjectAllocation
如何从SELECT语句中获得以下结果?
classSTD | sectionName | Main subjectName | Optional subjectName
-----------------------------------------------------------------------------
STD-1 | sec-A | Art, Music |
STD-1 | sec-B | Art | Music
STD-1 | sec-C | | Art
STD-3 | sec-A | |
STD-4 | | |发布于 2015-12-28 19:55:08
select
ClassSTD as ClassSTD,
sectionname AS SectionName,
COALESCE(GROUP_CONCAT(CASE WHEN sac.type = 'main' THEN subjectName END), '') as 'Main subjectname',
COALESCE(GROUP_CONCAT(CASE WHEN sac.type = 'optional' THEN subjectName END), '') as 'Optional subjectname'
FROM SubjectAllocationToClass sac
JOIN Class c ON c.classid = sac.classid
JOIN Section sc ON sc.sectionid = sac.sectionid
JOIN Subject sj ON sj.subjectid = sac.subjectid
GROUP BY ClassSTD, SectionName;发布于 2015-12-28 19:31:49
可以使用GROUP_CONCAT()和CASE表达式进行条件分组,如下所示
select c.ClassID, s.sectionName,
xx.`Main subjectName`,
xx.`optional subjectName`
from Class c
join Section ss on c.ClassID = ss.ClassID
join (
select sa.sectionID,
group_concat(case when sa.type = 'main' then s.subjectName else null end) as `Main subjectName`,
group_concat(case when sa.type = 'optional' then s.subjectName else null end) as `optional subjectName`
from SubjectAllocationToClass sa
join Subject s on sa.subjectId = s.subjectId
group by sa.subjectId ) xx on ss.SectionId = xx.SectionId;https://stackoverflow.com/questions/34499359
复制相似问题