월별 금액합계 후 초과시 0 2 514

by oneg [SQL Query] [2022.01.06 00:57:17]


아래쿼리인데요..

1월부터 월별로 쭈욱 나열 후에 금액이 100만원 초과되면 잘라내야하는데..

방법이 생각이 나질 않네요.

예를들어 1,2,3월의 금액을 합계하면 120만원인데

3월까지는 100만원으로만 표기되고 diff컬럼에 20만원을 표기하면 되는데, 이 기초적인것도 모르다니..공부 열심히 해야겠습니다

고수님들 답변 좀 부탁드립니다
               

select months, amt, '' diff
 from (               
select   '1' months, 500000 as amt from dual
union all
select   '2', 300000 as amt from dual
union all
select   '3', 400000 as amt from dual
union all
select   '4', 500000 as amt from dual
)             
order by months

by 마농 [2022.01.06 08:15:45]

month 가 가변 자리 문자열이면 정렬이 원하는 대로 나오지 않습니다.
'10' 이 '2' 보다 빠름.
따라서 숫자 또는 고정자리로 가공하여 정렬해야 하는 불편함이 있습니다.
애초에 숫자(1) 또는 고정자리('01' 형태) 문자로 관리하셔야 합니다.
 

WITH t AS
(
SELECT '1' months, 500000 amt FROM dual
UNION ALL SELECT '2', 300000 FROM dual
UNION ALL SELECT '3', 400000 FROM dual
UNION ALL SELECT '4', 500000 FROM dual
)
SELECT months
     , amt
     , GREATEST(0, s - 1000000) diff
  FROM (SELECT months
             , amt
             , SUM(amt) OVER(ORDER BY TO_NUMBER(months)) s
          FROM t
        )
 WHERE s - amt < 1000000
;

 


by oneg [2022.01.07 13:37:01]

답변 감사합니다. 말씀하신 자리수는 잘 참고하겠습니다

새해 복 많이 받으세요 ^^

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