시간설정 기준값 컬럼은 2개가 있구요 분과 시를 표시합니다.
예를들어 A, B, C 3개의 스케줄이 있다면
C_MIN C_HOUR
A 01,03,58 09 : 09시 01분, 03분, 58분에 가동하라
B 02 * : 매시간(*) 02분마다 가동하라
C 03 00,01,16,23 : 00시 01시 16시 23시의 03분에 가동하라
이런의미가 됩니다.
그런데 해당 시간, 분의 항목에 1을 표시해서 뿌려보고 싶습니다.
00시 01시 ..... .... 09시 ...... 23시
00 01 02 03 ... 59 00 01 02 03 ... 59 00 01 02 03 .... 58 59 ... 00 01 02 03 ... 59
A 1 1 1 ...
B 1 1 1 ... 1
C 1 1 1
CONNECT BY ?! 써야 되는건지 어떻게 해야 되는건지...전혀 감이 안오네요 ㅠㅠ
컬럼이 너무 많지 않나요? 24*60=1440
꼭 한줄에 다 나와야 하나요?
시간을 아래로 내려서 24줄에 60개 항목만 하던가 하는 방식으로 결과 포멧을 바꾸는 건 어떤지?
컬럼이 아닌 행으로 되어도
가로든 세로든 상관 없습니다.
시간대의 분별로만 표시 가능하면 됩니다
WITH t AS
(
SELECT 'A' id, '01,03,58' c_min, '09' c_hour FROM dual
UNION ALL SELECT 'B', '02', '*' FROM dual
UNION ALL SELECT 'C', '03', '00,01,16,23' FROM dual
)
SELECT *
FROM (SELECT id
, hh
, TO_NUMBER(mi) mi
FROM (SELECT LPAD(LEVEL - 1, 2, '0') hh FROM dual CONNECT BY LEVEL <= 24) a
, (SELECT LPAD(LEVEL - 1, 2, '0') mi FROM dual CONNECT BY LEVEL <= 60) b
, t c
WHERE (INSTR(c_hour, hh) > 0 OR c_hour = '*')
AND (INSTR(c_min , mi) > 0 OR c_min = '*')
)
PIVOT (COUNT(*) FOR mi IN ( 00, 01, 02, 03, 04, 05, 06, 07, 08, 09
, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29
, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59
) )
ORDER BY id, hh
;
(-___-);;;;;
마농님... 제 질문을 보시고... 이게... 머리에 확 떠오르시나요??
진심 ㅠㅠ 존경스럽습니다
(^_^)b
저 쿼리 저도 분석하며 공부해보겠습니다. 오늘 신의경지를 본거 같은 느낌이 드네요...