배부율에 맞게 금액을 배부 하고 남은 짜투리 금액을 더해주고 싶습니다. 0 2 1,114

by 낭군이 [SQL Query] [2019.03.07 16:45:48]


각 항목별로 배부율이

A  33.33

B.  33.33

C.  33.34

 

총금액 11 원을   A,B,C 에 배부시  ( 소수점 2 자리 반올림 ) 

A.  3.67

B.  3.67

C.  3.67 

A,B,C 금액을 합산시  11.01 이 나오는데요.   0.1 을  A,B,C 중  아무 행에서  차감하여  총금액과 일치 시키고 싶습니다. 

어떻게 쿼리를 만들어야 할런지.

나름 검색을 해봤는데..  혹시 도움 될만한거  링크라도 주시면 감사하겠습니다. 

 

고맙습니다.

 

 

 

이렇게 나와서 

by 우리집아찌 [2019.03.07 17:50:08]
-- 잘못이해했네요.. 수정.
WITH  T ( NM , RT ) as ( 
SELECT 'A' , 33.33 FROM DUAL UNION ALL
SELECT 'B' , 33.33 FROM DUAL UNION ALL
SELECT 'C' , 33.34 FROM DUAL 
)

          
SELECT NM
     , RT
     , AMT
     , CASE WHEN RN = 1 THEN AMT + 11 - SUM(AMT) OVER() ELSE AMT END AMT2
  FROM ( SELECT NM 
              , RT
              , ROUND(( RT / 100 ) * 11 , 2 )  AS AMT
              , ROW_NUMBER() OVER(ORDER BY NM DESC) RN
          FROM T 
       )
  ORDER BY NM

 


by 이준환 [2019.03.08 12:59:06]
/*
총금액(AMT), 분배수(DIV)를 입력받아,
총금액/분배수를 소수점2자리 반올림처리한 후,
그 합계금액과 최초총금액의 차이를 임의의 대상(행)에서 보정처리 합니다.
2019.03.08, Jun H. Lee
*/

SELECT
  AMT /*총금액*/
, SEQ /*일련번호*/
, OBJ /*대상*/
, DIV_AMT /*분배금액*/
, RAN_SEQ /*임의일련번호*/
, DIV_AMT +DECODE(RAN_SEQ, 1, AMT-SUM(DIV_AMT)OVER(), 0) AS MOD_DIV_AMT /*수정분배금액*/
FROM
(
    SELECT
      AMT /*총금액*/
    , LEVEL AS SEQ /*일련번호*/
    , CHR(64+LEVEL) AS OBJ /*대상*/
    , ROUND(AMT/DIV, 2) AS DIV_AMT /*분배금액*/
    , ROW_NUMBER()OVER(ORDER BY DBMS_RANDOM.RANDOM) AS RAN_SEQ /*임의일련번호*/
    FROM
    (
        SELECT
          11 AS AMT /*총금액*/ /*입력변수01*/
        , 3 AS DIV /*분배수*/ /*입력변수02*/
        FROM DUAL
    )
    CONNECT BY LEVEL <= DIV
)
ORDER BY SEQ
;

 

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