Indeed, I arrived at a very similar solution right after my post. Here's my version that simulates more closely how our data is structured.
WITH work AS (SELECT 1 AS ssn, 'A' AS home_can, 100.01 AS gross_amt FROM DUAL
UNION ALL
SELECT 2 AS ssn, 'A' AS home_can, 100.01 AS gross_amt FROM DUAL
UNION ALL
SELECT 3 AS ssn, 'A' AS home_can, 100.01 AS gross_amt FROM DUAL
)
,dist AS (SELECT 1 AS ssn, 'A' AS home_can, 'A1' AS dist_can, .65 AS dist_pct FROM DUAL
UNION ALL
SELECT 1 AS ssn, 'A' AS home_can, 'A2' AS dist_can, .35 AS dist_pct FROM DUAL
UNION ALL
SELECT 2 AS ssn, 'A' AS home_can, 'A4' AS dist_can, .90 AS dist_pct FROM DUAL
UNION ALL
SELECT 2 AS ssn, 'A' AS home_can, 'A3' AS dist_can, .05 AS dist_pct FROM DUAL
UNION ALL
SELECT 2 AS ssn, 'A' AS home_can, 'A6' AS dist_can, .03 AS dist_pct FROM DUAL
UNION ALL
SELECT 2 AS ssn, 'A' AS home_can, 'A5' AS dist_can, .02 AS dist_pct FROM DUAL
UNION ALL
SELECT 3 AS ssn, 'A' AS home_can, 'A1' AS dist_can, .33 AS dist_pct FROM DUAL
UNION ALL
SELECT 3 AS ssn, 'A' AS home_can, 'A2' AS dist_can, .33 AS dist_pct FROM DUAL
UNION ALL
SELECT 3 AS ssn, 'A' AS home_can, 'A3' AS dist_can, .33 AS dist_pct FROM DUAL
UNION ALL
SELECT 3 AS ssn, 'A' AS home_can, 'A4' AS dist_can, .01 AS dist_pct FROM DUAL
)
SELECT s.*
,CASE WHEN row_num > 1 THEN dist_amt ELSE dist_amt + ( gross_amt - dist_bal ) END AS dist_adj_amt -- let the last (largest) bucket have the odd penny
FROM (SELECT d.ssn, d.home_can, d.dist_can, d.dist_pct, w.gross_amt
,ROUND(w.gross_amt*d.dist_pct,2) AS dist_amt
,SUM(ROUND(w.gross_amt*d.dist_pct,2)) OVER (PARTITION BY d.ssn ORDER BY d.dist_pct , d.dist_can ) AS dist_bal
,ROW_NUMBER() OVER (PARTITION BY d.ssn ORDER BY d.dist_pct DESC, d.dist_can DESC) AS row_num
FROM dist d JOIN work w ON w.ssn = d.ssn AND w.home_can = d.home_can
) s
ORDER BY s.ssn, s.dist_pct, s.dist_can;
SSN H DI DIST_PCT GROSS_AMT DIST_AMT DIST_BAL ROW_NUM DIST_ADJ_AMT
--- - -- ---------- ---------- ---------- ---------- ---------- ------------
1 A A2 .35 100.01 35 35 2 35
1 A A1 .65 100.01 65.01 100.01 1 65.01
2 A A5 .02 100.01 2 2 4 2
2 A A6 .03 100.01 3 5 3 3
2 A A3 .05 100.01 5 10 2 5
2 A A4 .9 100.01 90.01 100.01 1 90.01
3 A A4 .01 100.01 1 1 4 1
3 A A1 .33 100.01 33 34 3 33
3 A A2 .33 100.01 33 67 2 33
3 A A3 .33 100.01 33 100 1 33.01
10 rows selected