Попробуй это. Если вы раскомментируете закомментированный блок, вы можете запустить оператор как есть, чтобы получить предоставленный вами результат.
/*
WITH TAB (GRP_ID, YR_MO, MONTHLY_COST, NEXT_RENEWAL_YR_MO) AS
(
VALUES
('001', '201202', 10, '202007')
, ('001', '201201', 10, '202007')
, ('001', '201203', 10, '202007')
, ('001', '201204', 10, '202007')
, ('001', '201205', 10, '202007')
, ('001', '201206', 10, '202007')
, ('001', '201207', 10, '202007')
, ('001', '201208', 10, '202007')
, ('001', '201209', 10, '202007')
, ('001', '201210', 10, '202007')
, ('001', '201211', 10, '202007')
, ('001', '201212', 10, '202007')
, ('001', '201301', 10, '202007')
, ('001', '201302', 10, '202007')
, ('001', '201303', 10, '202007')
, ('001', '201304', 10, '202007')
, ('001', '201305', 10, '202007')
, ('001', '201306', 10, '202007')
, ('001', '201307', 10, '202007')
, ('001', '201308', 10, '202007')
)
*/
SELECT
GRP_ID, YR_MO
, SUM(CASE WHEN RIGHT(YR_MO, 2) = RIGHT(NEXT_RENEWAL_YR_MO, 2) THEN 1 ELSE 0 END) OVER (PARTITION BY GRP_ID ORDER BY YR_MO) + 1 AS POLICY_PERIOD
, MONTHLY_COST
, SUM(MONTHLY_COST) OVER
(
PARTITION BY
GRP_ID
, SUM(CASE WHEN RIGHT(YR_MO, 2) = RIGHT(NEXT_RENEWAL_YR_MO, 2) THEN 1 ELSE 0 END) OVER (PARTITION BY GRP_ID ORDER BY YR_MO)
ORDER BY YR_MO
) AS RUN_TOT_AMT_PER_PLCY_PRD
FROM TAB;
db <> пример скрипты .