SELECT
REPORT_MONTH,
CATEGORY_A,
NVL(CATEGORY_A, LAG(CATEGORY_A, 1) OVER (ORDER BY REPORT_MONTH) * ROUND(CATEGORY_B / LAG(CATEGORY_B, 1) OVER (ORDER BY REPORT_MONTH), 2)) ADJUSTED_CATEGORY_A,
CATEGORY_B,
ROUND(CATEGORY_B / LAG(CATEGORY_B, 1) OVER (ORDER BY REPORT_MONTH), 2) CATEGORY_B_CHANGE_RATIO
FROM (
SELECT TO_DATE('01-JAN-2016') REPORT_MONTH, 100 CATEGORY_A, 200 CATEGORY_B FROM DUAL
UNION ALL
SELECT TO_DATE('01-FEB-2016') REPORT_MONTH, NULL CATEGORY_A, 400 CATEGORY_B FROM DUAL
UNION ALL
SELECT TO_DATE('01-MAR-2016') REPORT_MONTH, NULL CATEGORY_A, 200 CATEGORY_B FROM DUAL
UNION ALL
SELECT TO_DATE('01-APR-2016') REPORT_MONTH, NULL CATEGORY_A, 100 CATEGORY_B FROM DUAL
UNION ALL
SELECT TO_DATE('01-MAY-2016') REPORT_MONTH, NULL CATEGORY_A, 200 CATEGORY_B FROM DUAL
UNION ALL
SELECT TO_DATE('01-JUN-2016') REPORT_MONTH, NULL CATEGORY_A, 100 CATEGORY_B FROM DUAL
)