a 라는 사람의 1 코드에 해당하는 amt 금액 전체 합계에서 10만 빠지고 나머지가 나와야 합니다.
그래서 select 결과가
emp_no | code | amt a 1 4 a 1 5
아래와 같이 나와야 하거든요.
어떻게 하면 되는지 도움을 구합니다.
감사합니다.
by finecomp
[2011.12.29 07:07:21]
amt가 음수가 없다면 간단히,
LEAST(amt, SUM(amt) OVER(PARTITION BY emp_no, code ORDER BY rownum) - 10) AS amt
구한 후
WHERE amt > 0 조건으로 Filtering하면 되겠죠...;
by 마농
[2011.12.29 09:28:45]
-- 순서항목이 있어야 명확할듯 하네요.
WITH t AS
(
SELECT 'a' emp_no, '1' code, 1 seq, 3 amt FROM dual
UNION ALL SELECT 'a', '1', 2, 3 FROM dual
UNION ALL SELECT 'a', '1', 3, 8 FROM dual
UNION ALL SELECT 'a', '1', 4, 5 FROM dual
)
SELECT emp_no, code, amt
FROM
(
SELECT emp_no, code
, LEAST(amt, SUM(amt) OVER(PARTITION BY emp_no, code ORDER BY seq) - 10) amt
FROM t
)
WHERE amt > 0
;
by 강태훈
[2011.12.30 15:35:32]
귀중한 답변주셔서 정말 감사드립니다. ^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.