특정 조건하의 select 결과 찾기 0 3 1,402

by 강태훈 [2011.12.28 18:26:46]


안녕하세요?

오라클클럽에 처음 글을 남기며 고수님들의 도움을 구합니다.

예를 들어 테이블에

emp_no   |   code    |    amt
a                 1              3
a                 1              3
a                 1              8
a                 1              5

위와 같이 데이터가 들어가 있다면

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() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입