[英]MYSQL comma separated result with two types
我有4張桌子,如下所示。
表: 類
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
表: 主題
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”顯示了將兩種類型的主題(主主題和可選主題)分配給類的各個部分。
不論科目或科目分配都需要所有類不論科目或科目分配都需要全部類
我如何從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 | | |
您可以結合使用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;
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.