[초보] 원하는 조건 데이타만 SUM 작업하기 질문입니다!! 전혀 모르겠네요;;ㅜㅜ 0 1 1,384

by SQL초보 [SQL Query] [2022.05.01 02:15:21]


PNO PCODE PCNT PSAL
5100 ABC 1 2000
5100 ABC 2 1000
5900 DEF 8 4000
5300 GHI 1 3000
5300 GHI 2 1500
5300 GHI 3 1200
5800 XYZ 15 3500
5500 GHK 2 -110
5500 GHK 3 -500
5700 KYC 21 3500

 

위의 데이타결과가 나오는 SQL을 아래 처럼 나오게 SQL로 수정이 가능할까요??

요건 : PCODE 가 GHI, GHK 이면, 같은 PNO기준으로 PSAL을 SUM해서 아래처럼 나오게 한다

(이 때, PCNT는 무조건 1로 보여지면 된다)

PNO PCODE PCNT PSAL
5100 ABC 1 2000
5100 ABC 2 1000
5900 DEF 8 4000
5300 GHI 1 5700
5800 XYZ 15 3500
5500 GHK 1 -610
5700 KYC 21 3500

 

수정 전 SQL 예시 -----

select a.PNO, a.PCODE, a.PCNT, a.PSAL

from TOS_A a, TOS_B b

where a.SEQ = b.SEQ;

 

위 SQL에서 어떻게 그룹을 만들고 SUM 을 해야할지 몰라서

질문드립니다~ 조언 부탁드립니다

(부족한 설명 있으면 뎃글 주시면 바로 수정하겠습니다)

 

by 마농 [2022.05.01 22:24:45]
WITH t AS
(
SELECT 5100 pno, 'ABC' pcode, 1 pcnt, 2000 psal FROM dual
UNION ALL SELECT 5100, 'ABC',  2, 1000 FROM dual
UNION ALL SELECT 5900, 'DEF',  8, 4000 FROM dual
UNION ALL SELECT 5300, 'GHI',  1, 3000 FROM dual
UNION ALL SELECT 5300, 'GHI',  2, 1500 FROM dual
UNION ALL SELECT 5300, 'GHI',  3, 1200 FROM dual
UNION ALL SELECT 5800, 'XYZ', 15, 3500 FROM dual
UNION ALL SELECT 5500, 'GHK',  2, -110 FROM dual
UNION ALL SELECT 5500, 'GHK',  3, -500 FROM dual
UNION ALL SELECT 5700, 'KYC', 21, 3500 FROM dual
)
SELECT pno
     , pcode
     , SUM(pcnt) pcnt
     , SUM(psal) psal
  FROM t
 GROUP BY pno, pcode
     , CASE WHEN pcode NOT IN ('GHI', 'GHK') THEN ROWNUM END
-- ORDER BY pno
;

 

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