/
관리 데이터 입니다
| 창고 테이블 | 관리자(일자별,오전/오후, 창고) | ||||
| 창고1 | 2023-03-01 | 오전 | 홍길동 | 창고2 | |
| 창고2 | 오후 | 김길동 | 창고1 | ||
| 창고3 | 2023-03-02 | 오전 | 이길동 | 창고2 | |
| 창고4 | 오후 | 김길동 | 창고5 | ||
| 창고5 | 2023-03-03 | 오전 | 이길동 | 창고1 | |
| 오후 | 김길동 | 창고3 | |||
| 2023-03-04 | 오전 | 홍길동 | 창고2 | ||
| 오후 | 전길동 | 창고5 | |||
| 2023-03-05 | 오전 | 홍길동 | 창고2 | ||
| 오후 | 김길동 | 창고5 |
조회
| 2023-03-01 | 2023-03-02 | 2023-03-03 | 2023-03-04 | 2023-03-05… | ||||||
| 오전 | 오후 | 오전 | 오후 | 오전 | 오후 | 오전 | 오후 | 오전 | 오후 | |
| 창고1 | 김길동 | 이길동 | ||||||||
| 창고2 | 홍길동 | 이길동 | 홍길동 | 홍길동 | ||||||
| 창고3 | 김길동 | |||||||||
| 창고4 | ||||||||||
| 창고5 | 김길동 | 전길동 | 김길동 | |||||||
창고별 일자(시작일자~종료일자 조건 ,최대 30일)으로 하고 싶은데
고수님들 부탁드립니다
원본 자료가 저렇게 구성되어있나요?
원본과 원하는결과를 보여주세요.
기간이 가변이라면 SQL 만으로는 어렵습니다. 동적 SQL 쓰셔야 합니다.
기간이 한달 고정이라면? 1~31일까지 고정으로 표현하면 될 듯 합니다.
창고가 고정이라면? 행과 열을 바꾸어 표현하는 방안도 있습니다.
SELECT 창고
, COUNT(DECODE(일자, '2023-03-01', 1)) "2023-03-01"
, COUNT(DECODE(일자, '2023-03-02', 1)) "2023-03-02"
, COUNT(DECODE(일자, '2023-03-03', 1)) "2023-03-03"
, COUNT(DECODE(일자, '2023-03-04', 1)) "2023-03-04"
, COUNT(DECODE(일자, '2023-03-05', 1)) "2023-03-05"
FROM t
WHERE 일자 >= '2023-03-01'
AND 일자 <= '2023-03-05'
GROUP BY 창고
;
PIVOT으로 가능 할까요?!
SELECT *
FROM (SELECT 창고
, 일자
FROM t
WHERE 일자 >= '2023-03-01'
AND 일자 <= '2023-03-05'
)
PIVOT (COUNT(*) FOR 일자 IN ( '2023-03-01' "2023-03-01"
, '2023-03-02' "2023-03-02"
, '2023-03-03' "2023-03-03"
, '2023-03-04' "2023-03-04"
, '2023-03-05' "2023-03-05"
) )
;
WITH t AS
(
SELECT '2023-03-01' dt, '오전' am, '홍길동' nm, '창고2' st FROM dual
UNION ALL SELECT '2023-03-01', '오후', '김길동', '창고1' FROM dual
UNION ALL SELECT '2023-03-02', '오전', '이길동', '창고2' FROM dual
UNION ALL SELECT '2023-03-02', '오후', '김길동', '창고5' FROM dual
UNION ALL SELECT '2023-03-03', '오전', '이길동', '창고1' FROM dual
UNION ALL SELECT '2023-03-03', '오후', '김길동', '창고3' FROM dual
UNION ALL SELECT '2023-03-04', '오전', '홍길동', '창고2' FROM dual
UNION ALL SELECT '2023-03-04', '오후', '전길동', '창고5' FROM dual
UNION ALL SELECT '2023-03-05', '오전', '홍길동', '창고2' FROM dual
UNION ALL SELECT '2023-03-05', '오후', '김길동', '창고5' FROM dual
)
SELECT *
FROM (SELECT dt, am, nm, st
FROM t
WHERE dt >= '2023-03-01'
AND dt <= '2023-03-05'
)
PIVOT (MIN(nm) FOR (dt, am) IN ( ('2023-03-01', '오전') "2023-03-01 오전"
, ('2023-03-01', '오후') "2023-03-01 오후"
, ('2023-03-02', '오전') "2023-03-02 오전"
, ('2023-03-02', '오후') "2023-03-02 오후"
, ('2023-03-03', '오전') "2023-03-03 오전"
, ('2023-03-03', '오후') "2023-03-03 오후"
, ('2023-03-04', '오전') "2023-03-04 오전"
, ('2023-03-04', '오후') "2023-03-04 오후"
, ('2023-03-05', '오전') "2023-03-05 오전"
, ('2023-03-05', '오후') "2023-03-05 오후"
) )
ORDER BY st
;
매번, 너무 감사드립니다