【问题标题】:Concatinate unknown number of values in sqlite在sqlite中连接未知数量的值
【发布时间】: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


    【解决方案1】:

    将 MIN/MAX 替换为 GROUP_CONCAT

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多