回答

收藏

在sqlite未知数量的中合并值

技术问答 技术问答 246 人阅读 | 0 人回复 | 2023-09-13

我正在使用sqlite 3.15.1。
) N/ U6 Z  R# I- D我有一张表master,有大学时间表。' R8 v  {6 @) |2 f2 _& P# Z
看起来像 :
$ l2 s4 z. S& Q5 f3 T: r! nday         sem         sec         hour        sub_id    ----------  ----------  ----------  ----------  ----------   MON       5 5                                    5                                 B           4                          IS51 MON       5 5                                    5                                 B           4                          IS53   MON       5 5                                    5                                 B         5 5                                    5                                 10CS54    MON       5 5                                    5                                 B                                           CS55    MON       5 5                                    5                                 B           7                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            CS53    MON                                                  3                    A                                                                                                                                                                                                                       CS33还有更多的价值…
, z3 C5 ^  o. `其他值相同    ,有多个sub_id    ,这意味着-星期一,B5名学生可能有2个或更多的实验(sub_id)。(分批进行)。/ N0 D; [6 X8 u& p6 R
我这样做是为了得到合适的时间表:
6 k# p$ Q6 q2 x0 g2 j3 xselect 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 masterwhere sem=5 and sec='B'group by dayorder by day;然而,当多个值(即一个值)出现时,它只给出一个max()值。我用的时候min(),我得到了min()值。我怎样才能两者兼得?7 ]6 o) }  g  z7 l0 T
视图如下:
8 l. H& Q1 C2 dday         hour-     hour-二       hour-3       hour-4      hour-5      hour-6       hour-7      hour-8    ----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------  ----------FRI     CS5二       10CS54      10CS53       10CS55      HRD         HRD         TUT                   MON     CSL58     10CSL58     10CSL58     10IS5     10CS54      10CS55      10CS53                 SAT     IS5     10CS55      10CS56       10CS5二                                                     THU     CS53       10IS5     10CS54      10CS5二                                                     TUE     CS54      10CS5二       10CS56       10CS56                                                     WED     CS56       10IS5     10CS53       10CS55      CSA         CSA         CSA但我想要这样的东西:
2 I' E  G" \+ z9 M5 \day         hour-1                                                                                                                                                                                                                                                                                                                                                                                                             hour-2                       hour-3       hour-4      hour-5      hour-6       hour-7      hour-8    ----------  ----------      ----------       ----------  ----------  ----------  ----------  ----------  ----------FRI     CS52,10CS53   10CS54           10CS53       10CS55      HRD         HRD         TUT                   MON     CSL58     CSL58,10CSL33  10CSL58     10IS51    1010CS54      10CS55      10CS53                 SAT     IS51,10IS48   10CS55           10CS56      10CS52                                                    THU         10CS53          10IS51           10CS54      10CS52                                                    TUE         10CS54          10CS52           10CS56      10CS56                                                    WED         10CS56          10IS51           10CS53      10CS55      CSA         CSA         CSA也就是说,所有类别-用逗号分开,而不是min()或max()。
" H# j" c, w9 M有可能实现这个目标吗?请帮我。
4 _. j8 c% c5 b1 L1 b) m. ^谢谢。5 M/ Q2 C. L# u& m8 b, u' {
                                                               
" z6 @& X, T4 e6 X: X/ W    解决方案:                                                               
5 i8 G7 r' B) O" _1 m# @! _0 G                                                                将MIN / MAX替换为GROUP_CONCAT, R+ W* W4 _9 y- N) J9 C7 k( k$ J8 H
group_concat( case when hour =8 then sub_id end ) as 'hour-8'from masterwhere sem=5 and sec='B'group by dayorder by day;                group_concat( case when hour =8 then sub_id end ) as 'hour-8'from masterwhere sem=5 and sec='B'group by dayorder by day;
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则