오라클 11g 사용
요일 컬럼 : 2(월), 3(화), 4(수), 5(목), 6(금), 7(토)
시간 컬럼 : A(오전), P(오후)
현재 DB자료 내용은
센터명 지점명 이름 요일 시간
센타1 A지점 가가가 월 오전
센타1 A지점 나나나 월 오전
센타1 A지점 다다다 월 오후
센타1 A지점 차차차 수 오후
센타1 B지점 라라라 월 오전
센타1 B지점 마마마 수 오후
센타2 A지점 바바바 월 오후
센타2 A지점 사사사 화 오전
센타2 A지점 아아아 수 오후
센타2 B지점 자자자 화 오후
아래 쿼리 적용 후
WITH A AS
(
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, decode(dday||ampm,'2A',MEDDRNM) W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT --월/오전
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, decode(dday||ampm,'2P',MEDDRNM) W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT --월/오후 UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, decode(dday||ampm,'3A',MEDDRNM) W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT --화/오전
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, decode(dday||ampm,'3P',MEDDRNM) W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT --화/오후 등등...
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, decode(dday||ampm,'4A',MEDDRNM) W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, decode(dday||ampm,'4P',MEDDRNM) W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, decode(dday||ampm,'5A',MEDDRNM) W7, NULL W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, decode(dday||ampm,'5P',MEDDRNM) W8, NULL W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, decode(dday||ampm,'6A',MEDDRNM) W9, NULL W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, decode(dday||ampm,'6P',MEDDRNM) W10, NULL W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, decode(dday||ampm,'7A',MEDDRNM) W11, NULL W12
FROM APDRSCHT
UNION ALL
SELECT SUBCENTERNM T1, MEDDEPTNM T2, SUBCENTERNM||'-'||MEDDEPTNM TT, NULL W1, NULL W2, NULL W3, NULL W4, NULL W5, NULL W6, NULL W7, NULL W8, NULL W9, NULL W10, NULL W11, decode(dday||ampm,'7P',MEDDRNM) W12
FROM APDRSCHT
)
SELECT T1, T2, TT
, MAX( CASE WHEN CHK = 1 THEN W1 END ) W1
, MAX( CASE WHEN CHK = 2 THEN W1 END ) W2
, MAX( CASE WHEN CHK = 3 THEN W1 END ) W3
, MAX( CASE WHEN CHK = 4 THEN W1 END ) W4
, MAX( CASE WHEN CHK = 5 THEN W1 END ) W5
, MAX( CASE WHEN CHK = 6 THEN W1 END ) W6
, MAX( CASE WHEN CHK = 7 THEN W1 END ) W7
, MAX( CASE WHEN CHK = 8 THEN W1 END ) W8
, MAX( CASE WHEN CHK = 9 THEN W1 END ) W9
, MAX( CASE WHEN CHK = 10 THEN W1 END ) W10
, MAX( CASE WHEN CHK = 11 THEN W1 END ) W11
, MAX( CASE WHEN CHK = 12 THEN W1 END ) W12
FROM (
SELECT T1, T2, TT, CHK, W1
, ROW_NUMBER() OVER( PARTITION BY TT, CHK ORDER BY ROWNUM ) RN
FROM (
SELECT T1, T2, TT, W1, '1' CHK
FROM A
WHERE W1 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W2, '2' CHK
FROM A
WHERE W2 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W3, '3' CHK
FROM A
WHERE W3 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W4, '4' CHK
FROM A
WHERE W4 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W5, '5' CHK
FROM A
WHERE W5 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W6, '6' CHK
FROM A
WHERE W6 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W7, '7' CHK
FROM A
WHERE W7 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W8, '8' CHK
FROM A
WHERE W8 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W9, '9' CHK
FROM A
WHERE W9 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W10, '10' CHK
FROM A
WHERE W10 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W10, '11' CHK
FROM A
WHERE W11 IS NOT NULL
UNION ALL
SELECT T1, T2, TT, W10, '12' CHK
FROM A
WHERE W12 IS NOT NULL
)
)
GROUP BY T1, T2, TT, RN
ORDER BY 1 DESC
센타명 지점명 월/오전 월/오후 화/오전 화/오후 수/오전 수/오후 ......... 금까지
센타1 A지점 가가가 다다다 차차차
센타1 A지점 나나나
센타1 B지점 라라라 마마마
센타2 A지점 바바바 사사사 아아아
센타2 B지점 자자자
결과값은 이처럼 원하는 대로 잘 나오고 있습니다.
현재까지 이 쿼리로 잘 사용하고 있었는데 아래 질문 글에 말씀드린 것 처럼 3TIRE 환경에서는 WITH 문이 컴파일이 안된다고 합니다.
쿼리를 바궈야 하는데 고맙게도 햇살조각님이 쿼리를 주셔서 적용하려 하니 쿼리량이 엄청 많아지는 군요. ㅜㅜ
이것 때문에 며칠 고생했는데 염치없지만 솔직히 도와달라고 말하고 싶습니다. 긴글 읽어 주셔서 감사합니다. |