본문 바로가기
  • 읽고보고쓰고
PROGRAMMING/Database

[ORACLE] 요일별 생산 수량 써머리 표출

by 체리그루브 2022. 12. 20.
728x90

화면에 표시할 생산정보 표기

위 내용은 요일 마다 다르게 표출되어 보여야 한다. 일요일은 생산하지 않는다. 따라서 시작일과 끝일을 표시할 때, 일요일 표기가 나오지 않게, 심지어 일요일과 월요일의 요일 설정은 동일하게 보이도록 해야한다. 다음과 같이 말이다.

요일별 설정. 오늘이 월요일이면 금요일 ~ 목요일까지 표시되도록 한다.

WITH T_DD AS (
    SELECT CASE TO_CHAR(SYSDATE, 'd') WHEN '1' THEN TRUNC(SYSDATE, 'd')-2
                WHEN '2' THEN TRUNC(SYSDATE, 'd')-2
                WHEN '3' THEN TRUNC(SYSDATE, 'd')-1
                WHEN '4' THEN TRUNC(SYSDATE, 'd')+1
                WHEN '5' THEN TRUNC(SYSDATE, 'd')+2
                WHEN '6' THEN TRUNC(SYSDATE, 'd')+3
                WHEN '7' THEN TRUNC(SYSDATE, 'd')+4 END AS START_DATE
            , CASE TO_CHAR(SYSDATE, 'd') WHEN '1' THEN TRUNC(SYSDATE, 'd')+4
                WHEN '2' THEN TRUNC(SYSDATE, 'd')+4
                WHEN '3' THEN TRUNC(SYSDATE, 'd')+5
                WHEN '4' THEN TRUNC(SYSDATE, 'd')+6
                WHEN '5' THEN TRUNC(SYSDATE, 'd')+8
                WHEN '6' THEN TRUNC(SYSDATE, 'd')+9
                WHEN '7' THEN TRUNC(SYSDATE, 'd')+10 END AS END_DATE
    FROM DUAL
)
SELECT  TO_CHAR(MK_DATE, 'MM/DD') AS MK_DATE
        , DECODE(DD, '1', '일', '2', '월', '3', '화', '4', '수', '5', '목', '6', '금', '7', '토') AS DD
        , SUM(MK_QTY) AS MK_QTY 
FROM (
    SELECT  ROW_NUMBER() OVER(ORDER BY MK_DATE ) RN
            , TO_CHAR(MK_DATE, 'd') AS DD
            , MK_DATE
            , MK_QTY 
    FROM    TB_ORD_QTY A
            INNER JOIN TB_PRD B ON A.PRD_ID = B.PRD_ID
            CROSS JOIN T_DD C 
    WHERE   A.MK_DATE BETWEEN C.START_DATE AND C.END_DATE
    AND     B.COMPANY_ID = '100006178107886'
) GROUP BY MK_DATE, DD
ORDER BY MAX(RN)
;


재미있는 작업이었다. 어떤 업체의 주문에 의한 생산 써머리 정보를 현재 날짜에 맞게 보여주도록 하는 쿼리다.

여기서 TO_CHAR(SYSDATE, 'd') 와 TRUNC(SYSDATE, 'd') 가 차이를 언급하고 간다. TO_CHAR(SYSDATE, 'd') 는 오늘날짜의 요일을 보여준다. 1 (일요일)부터 7 (토요일)까지 반환한다. TRUNC(SYSDATE, 'd') 는 오늘기준으로 이번주 첫날(일요일)을 가르킨다. 위에서는 특별히 요일에 따라 표현해주어야 할 결과요일이 달라 이와 같이 표현했다.

써머리를 나타내기 위한 쿼리 결과


※ 위 쿼리들은 현재 Live 에서 사용하는 것을 변형한 것임을 밝혀둔다.

728x90

댓글