--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로 행의 값을 열에 더해 주기가 어렵네요
고수 님들의 의견 부탁드립니다.
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');
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'
;
모두 감사 합니다.
사실 저도 뉴비디비님과 같이 2번 조인했습니다. 그런데 한번에 방법이 있었네요
감사합니다.
사실 RATIO_TO_REPORT 함수는 본적 만 있지 업무적으로 사용해 보는 건 처음 이네요 이렇게 사용을 하는 군요
또, 배워갑니다. (사이트가 열리지 않아서 잠시 맘을 좀 졸였네요 영 영 안열리면 어쩌 나 ~~ ㅎㅎ)