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 을 해야할지 몰라서
질문드립니다~ 조언 부탁드립니다
(부족한 설명 있으면 뎃글 주시면 바로 수정하겠습니다)
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 ;