>

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 () 대신 쉼표로 구분 된 모든 클래스입니다.

이것이 가능합니까? 도와주세요.

감사합니다.


  • 답변 # 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;
    
    

관련 자료

  • 이전 c# - 이 Oracle 대량 삽입이 작동하지 않는 이유는 무엇입니까?
  • 다음 git - 일부 특정 파일, 디렉토리를 제외하고 루트의 모든 파일을 무시하십시오