簡體   English   中英

用兩種類型的MYSQL逗號分隔結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM