안녕하세요 날짜를 컬럼(열)으로 변환 도움 부탁드립니다 1 6 2,340

by 일곱난장이 [Oracle 기초] 날짜를 컬럼 [2023.03.13 13:41:45]


/

 

관리 데이터 입니다

창고 테이블   관리자(일자별,오전/오후, 창고)      
창고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일)으로 하고 싶은데

고수님들 부탁드립니다

by 우리집아찌 [2023.03.13 14:17:35]

원본 자료가 저렇게 구성되어있나요?

원본과 원하는결과를 보여주세요.


by 마농 [2023.03.13 14:25:00]

기간이 가변이라면 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 창고
;

 


by 일곱난장이 [2023.03.13 15:35:42]

PIVOT으로 가능 할까요?!

 


by 마농 [2023.03.13 15:54:06]
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"
                             ) )
;

 


by 마농 [2023.03.13 16:02:18]
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
;

 


by 일곱난장이 [2023.03.14 15:25:08]

매번, 너무 감사드립니다

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입