【发布时间】:2017-04-03 00:02:52
【问题描述】:
我正在使用 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,这意味着 - 在星期一的第 1 个小时,第 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()。
有可能做到这一点吗?请帮帮我。
谢谢。
【问题讨论】:
标签: sql sqlite concatenation