[MariaDB] 시작시간~종료시간 을 연속적인 행으로 출력하고 싶습니다. 0 2 1,196

by KYoung [MySQL] 시간 [2016.03.10 17:29:43]


OPRT_STGY_ID    TOT_GB_CD    BUDY_CD    ALRM_STP_GB_CD    ST_TM    ED_TM    STND_SCORE
M001                M                N               A                         0            9          00
M001                M                N               A                         10          23         30
M001                M                N               C                         0            9          50
M001                M                N               C                         10           23        0
M001                S                N               A                         0            9          00
M001                S                N               A                         10          23         30
M001                S                N               C                         0            9          50
M001                S                N               C                         10           23        0

 

위와같은 구조에서 ST_TM ~ ED_TM을 연속적인 시간데이터로 출력하고싶습니다.

OPRT_STGY_ID    TOT_GB_CD    BUDY_CD    ALRM_STP_GB_CD    TM    STND_SCORE
M001                M                N               A                         00     00
M001                M                N               A                         01     00
M001                M                N               A                         02     00
M001                M                N               A                         03     00 
.
.
.
M001                M                N               A                         10     30
M001                M                N               A                         11     30
M001                M                N               A                         12     30
M001                M                N               A                         13     30
M001                M                N               A                         14     30

방법을 찾지못해서 질문드려요..
위처럼 하기위한 목적은 OPRT_STGY_ID,BUDY_CD,ALRM_STP_GB_CD와 시간별로 그루핑하여
TOT_GB_CD별로 SCORE를 뽑고 싶어서입니다. 현재 구조에서는 시간별 그루핑이 안되서
차선책을 찾고있었는데 혹시 다른방법도 있을가요? ㅠㅠ
DB는 MariaDB입니다. 감사합니다.

추가) ST_TM, ED_TM 은 고정값이 아닌 가변값입니다.
0~9, 10~23 || 0~3, 4~23 || 0~23 || 0~15, 16~23
중복된 값은 없습니다. 

 

by 마농 [2016.03.10 18:09:04]
SELECT a.oprt_stgy_id, a.tot_gb_cd, a.budy_cd, a.alrm_stp_gb_cd
     , b.tm
     , a.stnd_score
  FROM (SELECT 'M001' oprt_stgy_id, 'M' tot_gb_cd, 'N' budy_cd, 'A' alrm_stp_gb_cd
             , 0 st_tm, 9 ed_tm, '00' stnd_score
        UNION ALL SELECT 'M001', 'M', 'N', 'A', 10, 23, '30'
        UNION ALL SELECT 'M001', 'M', 'N', 'C',  0,  9, '50'
        UNION ALL SELECT 'M001', 'M', 'N', 'C', 10, 23, '00'
        UNION ALL SELECT 'M001', 'S', 'N', 'A',  0,  9, '00'
        UNION ALL SELECT 'M001', 'S', 'N', 'A', 10, 23, '30'
        UNION ALL SELECT 'M001', 'S', 'N', 'C',  0,  9, '50'
        UNION ALL SELECT 'M001', 'S', 'N', 'C', 10, 23, '00'
        ) a
 INNER JOIN
       (SELECT '00' tm
        UNION ALL SELECT '01'
        UNION ALL SELECT '02'
        UNION ALL SELECT '03'
        UNION ALL SELECT '04'
        UNION ALL SELECT '05'
        UNION ALL SELECT '06'
        UNION ALL SELECT '07'
        UNION ALL SELECT '08'
        UNION ALL SELECT '09'
        UNION ALL SELECT '10'
        UNION ALL SELECT '11'
        UNION ALL SELECT '12'
        UNION ALL SELECT '13'
        UNION ALL SELECT '14'
        UNION ALL SELECT '15'
        UNION ALL SELECT '16'
        UNION ALL SELECT '17'
        UNION ALL SELECT '18'
        UNION ALL SELECT '19'
        UNION ALL SELECT '20'
        UNION ALL SELECT '21'
        UNION ALL SELECT '22'
        UNION ALL SELECT '23'
        ) b
    ON b.tm BETWEEN a.st_tm AND a.ed_tm
 ORDER BY a.oprt_stgy_id, a.tot_gb_cd, a.budy_cd, a.alrm_stp_gb_cd, b.tm
;

 


by KYoung [2016.03.14 09:05:58]

답변 감사합니다~ 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입