2016-11-19 9 views
2

私はsqlite 3.15.1を使用しています。sqliteの値が不明確な数

大学のマスタータイムテーブルを含むテーブルmasterがあります。

それは次のようになります。

を意味し、同じ他の値のために複数のsub_idはあります....

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 

と、より多くの価値 - 月曜日の第一の時間では、第5回Bの学生が持っているかもしれません2つ以上のlab(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 

- 代わり分のカンマ区切りを、()またはMAX( )。

これは可能ですか?私を助けてください。

ありがとうございました。

答えて

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; 
関連する問題