/
관리 데이터 입니다
창고 테이블 | 관리자(일자별,오전/오후, 창고) | ||||
창고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 창고 ;
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 ;