다음과 같이 코드별로 순차적으로 금액값이 저장되는 데이터가 있습니다. cd seq amt A 1 100 A 2 -100 A 3 -200 A 4 300 A 5 200 A 6 300 A 7 -300 B 1 100 B 2 200 B 3 300 B 4 -200 B 5 -200 B 6 -100
[자료]
WITH t AS
(
SELECT 'A' cd, 1 seq, 100 amt FROM dual
UNION ALL SELECT 'A', 2, -100 FROM dual
UNION ALL SELECT 'A', 3, -200 FROM dual
UNION ALL SELECT 'A', 4, 300 FROM dual
UNION ALL SELECT 'A', 5, 200 FROM dual
UNION ALL SELECT 'A', 6, 300 FROM dual
UNION ALL SELECT 'A', 7, -300 FROM dual
UNION ALL SELECT 'B', 1, 100 FROM dual
UNION ALL SELECT 'B', 2, 200 FROM dual
UNION ALL SELECT 'B', 3, 300 FROM dual
UNION ALL SELECT 'B', 4, -200 FROM dual
UNION ALL SELECT 'B', 5, -200 FROM dual
UNION ALL SELECT 'B', 6, -100 FROM dual
)
[문제] 이 자료를 이용하여 순차적으로 들어온 자료중 서로 짝을 이루어 합계가 0이 되는 자료
즉, 색칠한 부분의 자료를 제외하고 조회하는 쿼리를 작성해 보세요.
색칠하지 않은 3건의 자료가 출력되어야 합니다.
[정답] <== 트리플클릭
SELECT cd, seq, amt
FROM (SELECT cd, seq, amt
, SUM(amt) OVER(PARTITION BY cd, ABS(amt), rn) ss
FROM (SELECT cd, seq, amt
, ROW_NUMBER() OVER(PARTITION BY cd, amt ORDER BY seq) rn
FROM t
)
)
WHERE ss != 0
ORDER BY cd, seq
;