비율로 매출 배분 0 376

by 구사일생 [SQL Query] 행의값을 열에 더하기 [2025.05.10 12:58:38]


 

--Before

ORGCD SALE
A0001 30000000
A0002 40000000
A0003 25000000

 

--After

ORGCD SALE 비율로 매출 배분
A0001 30000000 40714285.71
A0002 40000000 54285714.29

 

A0003 지점의 폐점으로 나머지 A0001, A0002지점으로 매출을 비율별로 배분을 해 줘야 합니다.

A0001 지점은 30000000 + ( (30000000/(30000000 + 40000000)) * 25000000 )

A0002 지점은  40000000 + ( (40000000/(30000000 + 40000000)) * 25000000 )

SQL로 행의 값을 열에 더해 주기가 어렵네요 

고수 님들의 의견 부탁드립니다.

by 뉴비디비 [2025.05.12 00:07:49]
WITH tbl AS (
	SELECT 'A0001' AS ORGCD, 30000000 AS SALE FROM dual UNION ALL 
	SELECT 'A0002',	40000000 FROM dual UNION ALL 
	SELECT 'A0003',	25000000 FROM dual 
)
SELECT 
	A.ORGCD, A.SALE, 
	round(A.SALE + ((A.SALE/(sum(A.SALE) OVER())) * B.SALE),2) "매출배분"
FROM tbl A, tbl B
WHERE A.ORGCD NOT IN ('A0003') AND B.ORGCD IN ('A0003');

by 마농 [2025.05.12 00:39:08]
WITH t AS
(
SELECT 'A0001' orgcd,	30000000 sale FROM dual
UNION ALL SELECT 'A0002',	40000000 FROM dual
UNION ALL SELECT 'A0003',	25000000 FROM dual
)
SELECT orgcd
     , sale
     , ROUND(sale + rat * amt, 2) sales
  FROM (SELECT orgcd
             , sale
             , RATIO_TO_REPORT(DECODE(orgcd, 'A0003', 0, sale)) OVER() rat
             , MIN(DECODE(orgcd, 'A0003', sale)) OVER() amt
          FROM t
        )
 WHERE orgcd != 'A0003'
;

 


by 구사일생 [2025.05.12 20:40:33]

모두 감사 합니다.

사실 저도 뉴비디비님과 같이 2번 조인했습니다. 그런데 한번에 방법이 있었네요

감사합니다.

사실 RATIO_TO_REPORT 함수는 본적 만 있지 업무적으로 사용해 보는 건  처음 이네요 이렇게 사용을 하는 군요

또, 배워갑니다. (사이트가 열리지 않아서 잠시 맘을 좀 졸였네요 영 영 안열리면 어쩌 나 ~~ ㅎㅎ)