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
'PROGRAMMING > Database' 카테고리의 다른 글
[ORACLE] 동일 상품정보 제거하기 (4) | 2022.12.14 |
---|---|
[ORACLE] 로그인 정책 적용 (10) | 2022.12.13 |
[ORACLE] 내 맘대로 소팅 (커스텀 정렬) (10) | 2022.12.12 |
[오라클] 주문배송 집계정보 처리 (19) | 2022.12.07 |
[ORACLE] 이번달 1일, 마지막일 구하기 (8) | 2022.11.16 |
댓글