쿼리 날짜함수 0 5 1,011

by 캘린다 [2019.06.12 10:29:22]


아래 표는 결과값

 

PROD Grade D_DATE S_DATE QTY INV
Moringga A+ 20190617 20190723 5000 OUT
Moringga A+ 20190617 20190623 1500 YES
Moringga A+ 20190617 20190623 1000 NO

 


with t as
(
select 'Moringga' prod,   'A+' grade,    '20190617' d_date,    '20190623' s_date,   '5000' qty,   'OUT' inv from dual union all
select 'Moringga',    'A+',    '20190617',    '20190623',    '1000',    'YES' from dual union all
select 'Moringga',    'A+',    '20190618',    '20190627',    '1000',    'NO' from dual union all
select 'Moringga',    'A+',    '20190617',    '20190623',    '500',    'YES' from dual 
)
select * from t

 

by 마농 [2019.06.12 11:01:40]

예시 자료의 수치가 서로 맞지 않고요. 질문은 이해하기 어렵게 설명되고 있네요.
설명은 복잡하고 이해하기 어려운데? 그냥 단순하게 만들어 봤습니다.
이게 원하는 쿼리가 아닐수도 있겠네요.

SELECT prod
     , grade
     , d_date
     , DECODE(inv, 'OUT', TO_CHAR(ADD_MONTHS(TO_DATE(s_date, 'yyyymmdd'), 1), 'yyyymmdd'), s_date) s_date
     , SUM(qty) qty
     , inv
  FROM t
 GROUP BY prod, grade, d_date, s_date, inv
 ORDER BY prod, grade, d_date, s_date, inv
;

 


by 캘린다 [2019.06.12 11:18:29]

수정하였습니다.


by 마농 [2019.06.12 11:30:06]

질문이 여전히 이상하네요.
"해당 prod의 max(s_date)값의 yes와"
prod 의 max(s_date)값은 20190627 인데? 이 날짜에는 yes 가 없는데? 이런 표현이 가능한건지?
d_date, s_date가 서로같은 yes 는 SUM 그 이외는 그대로 출력인데?
이게 무슨 의미인지? 그 이외라는게 뭔 의미인지?
yes 만 sum 하고 no 나 out 은 sum 하지 말라는 의미인가요?
케이스에 따라 다르게 출력해야 한다고 한다면? 다양한 케이스별 예제가 필요합니다.


by 캘린다 [2019.06.12 16:00:55]
YES, NO 둘중에 맥스인 s_date를 뽑아서 월이 OUT이랑 같으면 OUT의 월을 더하고싶습니다

수량합치는건 해결하였습니다


by 마농 [2019.06.12 19:18:15]
SELECT prod,  grade, d_date, s_date, qty, inv
     , CASE WHEN inv = 'OUT' AND SUBSTR(s_date, 1, 6) =
       SUBSTR(MAX(CASE WHEN inv IN ('YES', 'NO') THEN s_date END) OVER(PARTITION BY prod), 1, 6)
       THEN TO_CHAR(ADD_MONTHS(TO_DATE(s_date, 'yyyymmdd'), 1), 'yyyymmdd')
       ELSE s_date END x
  FROM t
 ORDER BY d_date, s_date
;

 

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