我正在使用sqlite 3.15.1。
我有一张表master
,其中包含大学的主时间表。
看起来像:
day sem sec hour sub_id
---------- ---------- ---------- ---------- ----------
MON 5 B 4 10IS51
MON 5 B 4 10IS53
MON 5 B 5 10CS54
MON 5 B 6 10CS55
MON 5 B 7 10CS53
MON 3 A 1 10CS33
还有更多价值......
相同的其他值有多个sub_id ,意思是 - 在星期一的第一个小时,第5个B学生可能有2个或更多个实验室(sub_id)。 (分批进行)。
为了得到一个合适的时间表,我这样做:
select day,
max( case when hour =1 then sub_id end ) as 'hour-1',
max( case when hour =2 then sub_id end ) as 'hour-2',
max( case when hour =3 then sub_id end ) as 'hour-3',
max( case when hour =4 then sub_id end ) as 'hour-4',
max( case when hour =5 then sub_id end ) as 'hour-5',
max( case when hour =6 then sub_id end ) as 'hour-6',
max( case when hour =7 then sub_id end ) as 'hour-7',
max( case when hour =8 then sub_id end ) as 'hour-8'
from master
where sem=5 and sec='B'
group by day
order by day;
但是当出现多个值时,它只给出一个值,即max()
值。当我使用min()
时,我得到min()值。 我如何同时获得两者?
结果视图如下:
day hour-1 hour-2 hour-3 hour-4 hour-5 hour-6 hour-7 hour-8
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
FRI 10CS52 10CS54 10CS53 10CS55 HRD HRD TUT
MON 10CSL58 10CSL58 10CSL58 10IS51 10CS54 10CS55 10CS53
SAT 10IS51 10CS55 10CS56 10CS52
THU 10CS53 10IS51 10CS54 10CS52
TUE 10CS54 10CS52 10CS56 10CS56
WED 10CS56 10IS51 10CS53 10CS55 CSA CSA CSA
但我想要这样的事情:
day hour-1 hour-2 hour-3 hour-4 hour-5 hour-6 hour-7 hour-8
---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
FRI 10CS52,10CS53 10CS54 10CS53 10CS55 HRD HRD TUT
MON 10CSL58 10CSL58,10CSL33 10CSL58 10IS51 10CS54 10CS55 10CS53
SAT 10IS51,10IS48 10CS55 10CS56 10CS52
THU 10CS53 10IS51 10CS54 10CS52
TUE 10CS54 10CS52 10CS56 10CS56
WED 10CS56 10IS51 10CS53 10CS55 CSA CSA CSA
即,所有类 - 逗号分隔,而不是min()或max()。
有可能实现这一目标吗?请帮帮我。
感谢。
答案 0 :(得分:2)
用GROUP_CONCAT替换MIN / MAX
select day,
group_concat( case when hour =1 then sub_id end ) as 'hour-1',
group_concat( case when hour =2 then sub_id end ) as 'hour-2',
group_concat( case when hour =3 then sub_id end ) as 'hour-3',
group_concat( case when hour =4 then sub_id end ) as 'hour-4',
group_concat( case when hour =5 then sub_id end ) as 'hour-5',
group_concat( case when hour =6 then sub_id end ) as 'hour-6',
group_concat( case when hour =7 then sub_id end ) as 'hour-7',
group_concat( case when hour =8 then sub_id end ) as 'hour-8'
from master
where sem=5 and sec='B'
group by day
order by day;