Query 질문이 있습니다. 0 2 215

by 김레골라스 [SQL Query] [2021.02.16 15:50:59]


개발자는 아니고 실무에 아주 간단한 쿼리를 활용하고자 하는 실무자인데, 쿼리문 질물이 있어 글 남깁니다.

관리번호 장비명 모델명 제조사
001 aa aaa AA
002 bb bbb BB

기본적인 장비들의 목록이 있는 table1

관리번호 이벤트날짜 이벤트내용
001 2020-10-20 입고
001 2021-01-05 수리
002 2021-01-10 입고
002 2021-02-05 수리
002 2021-02-10 수리

누적해서 장비들의 이벤트(입고, 수리, 교정 등)들을 기록하는 table2 가 있습니다.

위 두개의 table을 활용하여

관리번호 장비명 모델명 제조사 입고 수리
001 aa aaa AA 2020-10-20 2021-01-05
002 bb bbb BB 2021-02-05 2021-02-10

위와 같이 각각 해당하는 이벤트의 최신 날짜만 가져오는 쿼리를 짤 수 가 있을까요?

기존에 엑셀함수를 활용하여 관리 하던 부분인데, 매번 업데이트 파일을 제공해야 해서

쿼리를 활용해보고싶은데 여러 고수분들의 도움 요청해봅니다 :)

by 마농 [2021.02.16 16:21:13]
WITH table1 AS
(
SELECT '001' 관리번호, 'aa' 장비명, 'aaa' 모델명, 'AA' 제조사 FROM dual
UNION ALL SELECT '002', 'bb', 'bbb', 'BB' FROM dual
UNION ALL SELECT '003', 'cc', 'ccc', 'CC' FROM dual
)
, table2 AS
(
SELECT '001' 관리번호, '2020-10-20' 이벤트날짜, '입고' 이벤트내용 FROM dual
UNION ALL SELECT '001', '2021-01-05', '수리' FROM dual
UNION ALL SELECT '002', '2021-01-10', '입고' FROM dual
UNION ALL SELECT '002', '2021-02-05', '수리' FROM dual
UNION ALL SELECT '002', '2021-02-10', '수리' FROM dual
)
-- Oracle --
SELECT a.관리번호
     , a.장비명
     , a.모델명
     , a.제조사
     , MAX(CASE 이벤트내용 WHEN '입고' THEN 이벤트날짜 END) 입고
     , MAX(CASE 이벤트내용 WHEN '수리' THEN 이벤트날짜 END) 수리
     , MAX(CASE 이벤트내용 WHEN '교정' THEN 이벤트날짜 END) 교정
  FROM table1 a
  LEFT OUTER JOIN table2 b
    ON a.관리번호 = b.관리번호
 GROUP BY a.관리번호, a.장비명, a.모델명, a.제조사
;

 


by 김레골라스 [2021.02.16 16:41:08]

와.. 감사합니다.. 제가 ACCESS를 사용하고있어 CASE문이 동작하진 않았지만 IIF로 해보니 실마리가 보이네요.. 정말 큰 도움이 됐습니다. 감사합니다

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