这是一份精算报告。 逻辑是计算有损失(在上面有损失日期)的策略的数量。
这是EffectiveMMYY
,计数为PolicyNumbers
。这是我们每月出售的保单数量。我只显示那些对此有主张的人。
我们不计算没有损失的保单。
这是LossMMYY(报告损失的月份,月份)的PolicyNumbers计数
我有
矩阵 行:EffectiveMMYY
,
列:LossMMYY
,
值:SUM(PolicyNumberCount)
如何计算EffectiveMMYY
在SQL中的运行总计,因此结果将如下所示:
样本数据:
DECLARE @Table1 TABLE
(
ID INT,
PolicyNumber VARCHAR(50),
EffectiveDate DATE,
LossDate DATE
)
INSERT INTO @Table1 (ID, PolicyNumber, EffectiveDate, LossDate)
VALUES (1, 'Pol1', '2017-02-01', '2017-02-05'),
(2, 'Pol2', '2017-03-04', '2017-03-18'),
(3, 'Pol3', '2017-03-11', '2017-03-22'),
(4, 'Pol4', '2017-03-11', NULL),
(5, 'Pol5', '2017-03-15', '2017-04-22'),
(6, 'Pol6', '2017-04-18', '2017-04-19'),
(7, 'Pol7', '2017-04-22', '2017-04-29'),
(8, 'Pol8', '2017-04-15', '2017-04-18'),
(9, 'Pol9', '2017-12-15', '2018-01-23'),
(10, 'Pol10', '2017-02-13', '2017-03-11'),
(11, 'Pol11', '2017-02-18', '2017-03-22'),
(12, 'Pol12', '2017-02-17', '2018-01-05'),
(13, 'Pol13', '2017-05-28', '2017-05-30')
SELECT
ID, PolicyNumber,
FORMAT(EffectiveDate, 'MMM') + '-'+ FORMAT(EffectiveDate, 'yy') AS 'EffectiveMMYY',
FORMAT(LossDate, 'MMM') + '-'+ FORMAT(LossDate, 'yy') AS 'LossMMYY',
1 AS PolicyNumberCount
FROM
@Table1
ORDER BY
EffectiveDate
上述查询的结果如下:
我尝试过:
count(PolicyNumber) OVER (partition BY MONTH(EffectiveDate), YEAR(EffectiveDate) order by EffectiveDate ) as runtotEffMonth,
但这没有给我正确的结果
答案 0 :(得分:0)
with POL as (
select
FORMAT(EffectiveDate, 'yyyy-MM') aS EffYYYYMM,
FORMAT(LossDate, 'yyyy-MM') aS LossYYYYMM
from @Table1
where lossdate is not null
)
select
PE.EffYYYYMM,
PL.LossYYYYMM,
coalesce((
select count(*)
from pol p2
where p2.EffYYYYMM = pE.EffYYYYMM
and p2.LossYYYYMM <= pL.LossYYYYMM
), 0) as PolCount
from POL PE
cross join pol PL
group by
PE.EffYYYYMM,
PL.LossYYYYMM
order by 1,2