아찌님)쿼리 함수를 이용해서 날짜 합치기 0 11 706

by 강쥐용 [2019.01.16 14:28:25]


(조금 더 추가되었습니다. 컬럼seq )

1.하기처럼 sale_dt가 동일하며 수량도 동일한경우에는 한줄로 수량이 합쳐져 나오게,

2.sale_dt도 동일하며 수량도 동일한경우도 한줄로 합쳐져 나오게,

3.하나의 Item에 Sale_dt가 각각 다르고 수량도 다른경우 sale_dt가 Min은 냅두고 Max날짜에 QTY가 합쳐지게

4.그리고 3개가잇는데 2개는같고 1개가 다른경우는 같은 한개에 합치게 하려는데 잘안되서 질문 다시 남김니다.

WITH T ( ITEM ,seq, SALE_DT , BUY_DT , QTY ) AS (
SELECT '자몽' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '자몽' , '2', '2019-01-03' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '자몽' , '3', '2019-01-06' , '2019-01-01' , 300 FROM DUAL UNION ALL
SELECT '포도' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '포도' , '2', '2019-01-05' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '포도' , '3', '2019-01-06' , '2019-01-01' , 300 FROM DUAL UNION ALL
SELECT '사과' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '사과' , '2', '2019-01-03' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '사과' , '3','2019-01-03' , '2019-01-01' , 300 FROM DUAL 

SELECT ITEM ,  max(seq) seq, MAX(SALE_DT) SALE_DT , max(BUY_DT) BUY_DT , SUM(QTY) QTY
FROM 
        (
        SELECT ITEM ,seq, SALE_DT , BUY_DT , QTY, ROW_NUMBER() OVER(PARTITION BY ITEM ORDER BY SALE_DT ) RN
        FROM T 
        )
GROUP BY ITEM , DECODE(RN,1,2)
order by item, sale_dt, seq

by 우리집아찌 [2019.01.16 14:40:58]
WITH T ( ITEM , SALE_DT , BUY_DT , QTY ) AS (
SELECT '사과' , '2019-01-01' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '사과' , '2019-01-02' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '사과' , '2019-01-03' , '2019-01-01' , 300 FROM DUAL 
)

SELECT ITEM , MAX(SALE_DT) SALE_DT , MAX(BUY_DT) BUY_DT , SUM(QTY) QTY
  FROM ( SELECT ITEM , SALE_DT , BUY_DT , QTY 
              , ROW_NUMBER() OVER(PARTITION BY ITEM ORDER BY SALE_DT ) RN
           FROM T 
       )
 GROUP BY ITEM , DECODE(RN,1,2)

 


by 강쥐용 [2019.01.16 15:05:26]

감사합니당


by 강쥐용 [2019.01.17 15:19:54]

추가질문이있습니다.

(조금 더 추가되었습니다. 컬럼seq )

하기처럼 sale_dt가 동일하며 수량도 동일한경우에는 한줄로 수량이 합쳐져 나오게,

sale_dt도 동일하며 수량도 동일한경우도 한줄로 합쳐져 나오게,

그리고 3개가잇는데 2개는같고 1개가 다른경우는 같은 한개에 합치게 하려는데 잘안되서 질문 다시 남김니다.

WITH T ( ITEM ,seq, SALE_DT , BUY_DT , QTY ) AS (
SELECT '자몽' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '자몽' , '2', '2019-01-03' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '자몽' , '3', '2019-01-06' , '2019-01-01' , 300 FROM DUAL UNION ALL
SELECT '포도' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '포도' , '2', '2019-01-05' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '포도' , '3', '2019-01-06' , '2019-01-01' , 300 FROM DUAL UNION ALL
SELECT '사과' , '1', '2019-01-03' , '2019-01-01' , 100 FROM DUAL UNION ALL
SELECT '사과' , '2', '2019-01-03' , '2019-01-01' , 200 FROM DUAL UNION ALL
SELECT '사과' , '3','2019-01-03' , '2019-01-01' , 300 FROM DUAL 

SELECT ITEM ,  max(seq) seq, MAX(SALE_DT) SALE_DT , max(BUY_DT) BUY_DT , SUM(QTY) QTY
FROM 
        (
        SELECT ITEM ,seq, SALE_DT , BUY_DT , QTY, ROW_NUMBER() OVER(PARTITION BY ITEM ORDER BY SALE_DT ) RN
        FROM T 
        )
GROUP BY ITEM , DECODE(RN,1,2)
order by item, sale_dt, seq


by 마농 [2019.01.16 15:11:20]

이곳은 문제 해결만을 목적으로 하는 공간이 아닙니다.
문제 해결 과정을 통해 지식을 공유하는 공간입니다.
문제 해결만 하고 질문글을 지우는 것은 바람직하지 않은 것 같네요.


by 강쥐용 [2019.01.16 16:17:18]

아 해결완료되었다고 다른분들 번거로우실까봐 그랫는데 죄송합니다!

다음에는 지우지않겟습니다.


by 우리집아찌 [2019.01.16 16:32:53]

더 좋은 답변이 나중에 나올수도 있습니다. 

지우지 마세요.


by 우리집아찌 [2019.01.16 16:32:13]

-- 질문내용

acct_dt라는 칼럼에

‘20190101’ 10 row

‘20190102’ 8 row

’20190103’7row  저장되어 있습니다

’20190101’10건이 1~10seqno 표기해주고

’20190102’8건이1~8, ‘20190103’ 7건이 1~7 이렇게 표시 항수 있는 방법이 있나요

 


by 마농 [2019.01.17 16:11:33]

추가 질문이 이상해요. 앞뒤 문맥이 안맞아요. 결과표도 없구요.
원본 대비 결과표를 가지고 자료 대비 설명이 일치하도록 질문해 주세요.


by 강쥐용 [2019.01.17 17:30:10]

원본 

ITEM SALE_DT BUY_DT QTY
사과 2019-01-01 2019-01-01 100
사과 2019-01-02 2019-01-01 200
사과 2019-01-03 2019-01-01 300
결과      
ITEM SALE_DT BUY_DT QTY
사과 2019-01-01 2019-01-01 100
사과 2019-01-03 2019-01-01 500

 

추가질문 

ITEM SEQ SALE_DT BUY_DT QTY
사과 1 2019-01-01 2019-01-01 100
사과 2 2019-01-02 2019-01-01 200
사과 3 2019-01-03 2019-01-01 300
포도 1 2019-01-01 2019-01-01 100
포도 2 2019-02-01 2019-01-01 200
포도 3 2019-04-01 2019-01-01 300
자몽 1 2019-01-01 2019-01-01 100
자몽 2 2019-01-01 2019-01-01 200
자몽 3 2019-01-01 2019-01-01 300
감자 1 2019-01-01 2019-01-01 100
감자 2 2019-02-01 2019-01-01 200
감자 3 2019-03-01 2019-01-01 300
감자 4 2019-04-01 2019-01-01 400
         
결과표        
ITEM SEQ SALE_DT BUY_DT QTY
사과 1 2019-01-01 2019-01-01 100
사과 3 2019-01-03 2019-01-01 500
포도 1 2019-01-01 2019-01-01 100
포도 3 2019-04-01 2019-01-01 500
자몽 1 2019-01-01 2019-01-01 600
감자 1 2019-01-01 2019-01-01 100
감자 3 2019-03-01 2019-01-01 500
감자 4 2019-04-01 2019-01-01

400

 

결과표입니다.

처음 질문은 SALE_DT가 다르면 MIN(SALE_DT) 는 그대로 보여주고 MAX(SALE_DT)에 QTY를 더하는 질문이였습니다.

두번째는 

1.SALE_DT가 동일하고 수량도 동일한 경우 ROW 수가 한 줄로 수량이 합하여 나오기

2.SALE_DT가 2개는 동일하고 하나만 다른경우 SALE_DT가 같은곳에 SUM(QT)하고 다른하나는 그대로 보여지게

3.SALE_DT가 예) 1/1, 2/1, 3/1, 4/1일때 1/1은 그대로 2/1, 3/1은 합쳐지도록, 4/1은 그대로 보여지게 입니다.


by 마농 [2019.01.17 18:04:30]

설명이 이상합니다.
"수량도 동일한 경우" 는 해당 사항 없는 부분인 듯 하네요.
감자는 결과가 3건이 나오는게 맞나요? 이것도 틀린 것 같구요.
"2개는 동일하고 하나만 다른경우" 식의 표현은 너무 특정 자료 위주의 표현입니다.
공통적인 특징으로 표현해 주시는 게 좋습니다.
그룹을 "최초 일자" 및 "그외 일자" 로 나누면 될 것 같네요.
아찌님 쿼리의 ROW_NUMBER 를 RANK 로 수정하면 됩니다.


by 강쥐용 [2019.01.24 09:16:56]

답변이 늦어 죄송합니다.

말씀해주신데로 RANK으로 바꾸엇더니 해결하였습니다.

감사합니다

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