如何根据累积值创建总计

时间:2020-07-24 16:04:08

标签: tsql sql-server-2016

我创建了一个报告,该报告显示了每个损失月份(打开和关闭索赔时)的累计总额。下图可能会更好地说明这一点:

triangle report

y轴为损失日期的月份-x轴为索赔打开或关闭的月份。这是从左到右的累计总数。

例如,在2014年1月-共有5项未结索赔,而一项已结案。然后在2014年2月-又提出了两项​​索赔,而第二项索赔却被关闭。

图像中黄色突出显示的单元格是我无法计算的值。要获得单个损失月份的总数-我使用了一个Windows函数来获取最大值,并按年份,索赔月份和索赔状态进行了划分-

MAX( ClaimCount ) OVER (PARTITION BY Year, ClaimMonth, ClaimStatus)

对我来说不幸的是,我一直无法弄清楚如何计算索赔总数(已结案和总数)的总计。

下面是示例数据:

CREATE TABLE #claimcount
(
    Year INT NULL,
    ClaimStatus VARCHAR (25) NULL,
    LossMonth DATE NULL,
    ClaimMonth DATE NULL,
    ClaimCount INT NULL,
    ClaimTotalPerLossMonth INT NULL,
    ClaimTotalPerClaimMonth INT NULL,
    ClaimCountPerLossYear INT NULL
);
INSERT INTO #claimcount
(
    Year,
    ClaimStatus,
    LossMonth,
    ClaimMonth,
    ClaimCount,
    ClaimTotalPerLossMonth,
    ClaimTotalPerClaimMonth,
    ClaimCountPerLossYear
)
VALUES
(2014, 'Closed', '20140131', '20140131', 1, 7, 1, NULL),
(2014, 'Total', '20140131', '20140131', 5, 7, 5, NULL),
(2014, 'Closed', '20140131', '20140228', 2, 7, 2, NULL),
(2014, 'Total', '20140131', '20140228', 7, 7, 9, NULL),
(2014, 'Closed', '20140131', '20140331', 5, 7, 6, NULL),
(2014, 'Total', '20140131', '20140331', 7, 7, 11, NULL),
(2014, 'Closed', '20140131', '20140430', 5, 7, 8, NULL),
(2014, 'Total', '20140131', '20140430', 7, 7, 16, NULL),
(2014, 'Closed', '20140131', '20140531', 5, 7, 9, NULL),
(2014, 'Total', '20140131', '20140531', 7, 7, 33, NULL),
(2014, 'Closed', '20140131', '20140630', 5, 7, 15, NULL),
(2014, 'Total', '20140131', '20140630', 7, 7, 54, NULL),
(2014, 'Closed', '20140131', '20140731', 5, 7, 23, NULL),
(2014, 'Total', '20140131', '20140731', 7, 7, 78, NULL),
(2014, 'Closed', '20140131', '20140831', 6, 7, 48, NULL),
(2014, 'Total', '20140131', '20140831', 7, 7, 109, NULL),
(2014, 'Closed', '20140131', '20140930', 6, 7, 78, NULL),
(2014, 'Total', '20140131', '20140930', 7, 7, 136, NULL),
(2014, 'Closed', '20140131', '20141031', 7, 7, 94, NULL),
(2014, 'Total', '20140131', '20141031', 7, 7, 163, NULL),
(2014, 'Closed', '20140131', '20141130', 7, 7, 110, NULL),
(2014, 'Total', '20140131', '20141130', 7, 7, 187, NULL),
(2014, 'Closed', '20140131', '20141231', 7, 7, 128, NULL),
(2014, 'Total', '20140131', '20141231', 7, 7, 209, NULL),
(2014, 'Closed', '20140131', '20150131', 7, 7, 144, NULL),
(2014, 'Total', '20140131', '20150131', 7, 7, 240, NULL),
(2014, 'Closed', '20140131', '20150228', 7, 7, 167, NULL),
(2014, 'Total', '20140131', '20150228', 7, 7, 280, NULL),
(2014, 'Closed', '20140131', '20150331', 7, 7, 201, NULL),
(2014, 'Total', '20140131', '20150331', 7, 7, 321, NULL),
(2014, 'Closed', '20140131', '20150430', 7, 7, 231, NULL),
(2014, 'Total', '20140131', '20150430', 7, 7, 360, NULL),
(2014, 'Closed', '20140131', '20150531', 7, 7, 251, NULL),
(2014, 'Total', '20140131', '20150531', 7, 7, 386, NULL),
(2014, 'Closed', '20140131', '20150630', 7, 7, 283, NULL),
(2014, 'Total', '20140131', '20150630', 7, 7, 422, NULL),
(2014, 'Closed', '20140131', '20150731', 7, 7, 317, NULL),
(2014, 'Total', '20140131', '20150731', 7, 7, 452, NULL),
(2014, 'Closed', '20140131', '20150831', 7, 7, 346, NULL),
(2014, 'Total', '20140131', '20150831', 7, 7, 475, NULL),
(2014, 'Closed', '20140131', '20150930', 7, 7, 378, NULL),
(2014, 'Total', '20140131', '20150930', 7, 7, 486, NULL),
(2014, 'Closed', '20140131', '20151031', 7, 7, 405, NULL),
(2014, 'Total', '20140131', '20151031', 7, 7, 496, NULL),
(2014, 'Closed', '20140131', '20151130', 7, 7, 426, NULL),
(2014, 'Total', '20140131', '20151130', 7, 7, 501, NULL),
(2014, 'Closed', '20140131', '20151231', 7, 7, 448, NULL),
(2014, 'Total', '20140131', '20151231', 7, 7, 509, NULL),
(2014, 'Closed', '20140228', '20140131', 0, 2, 1, NULL),
(2014, 'Total', '20140228', '20140131', 0, 2, 5, NULL),
(2014, 'Closed', '20140228', '20140228', 0, 2, 2, NULL),
(2014, 'Total', '20140228', '20140228', 2, 2, 9, NULL),
(2014, 'Closed', '20140228', '20140331', 1, 2, 6, NULL),
(2014, 'Total', '20140228', '20140331', 2, 2, 11, NULL),
(2014, 'Closed', '20140228', '20140430', 2, 2, 8, NULL),
(2014, 'Total', '20140228', '20140430', 2, 2, 16, NULL),
(2014, 'Closed', '20140228', '20140531', 2, 2, 9, NULL),
(2014, 'Total', '20140228', '20140531', 2, 2, 33, NULL),
(2014, 'Closed', '20140228', '20140630', 2, 2, 15, NULL),
(2014, 'Total', '20140228', '20140630', 2, 2, 54, NULL),
(2014, 'Closed', '20140228', '20140731', 2, 2, 23, NULL),
(2014, 'Total', '20140228', '20140731', 2, 2, 78, NULL),
(2014, 'Closed', '20140228', '20140831', 2, 2, 48, NULL),
(2014, 'Total', '20140228', '20140831', 2, 2, 109, NULL),
(2014, 'Closed', '20140228', '20140930', 2, 2, 78, NULL),
(2014, 'Total', '20140228', '20140930', 2, 2, 136, NULL),
(2014, 'Closed', '20140228', '20141031', 2, 2, 94, NULL),
(2014, 'Total', '20140228', '20141031', 2, 2, 163, NULL),
(2014, 'Closed', '20140228', '20141130', 2, 2, 110, NULL),
(2014, 'Total', '20140228', '20141130', 2, 2, 187, NULL),
(2014, 'Closed', '20140228', '20141231', 2, 2, 128, NULL),
(2014, 'Total', '20140228', '20141231', 2, 2, 209, NULL),
(2014, 'Closed', '20140228', '20150131', 2, 2, 144, NULL),
(2014, 'Total', '20140228', '20150131', 2, 2, 240, NULL),
(2014, 'Closed', '20140228', '20150228', 2, 2, 167, NULL),
(2014, 'Total', '20140228', '20150228', 2, 2, 280, NULL),
(2014, 'Closed', '20140228', '20150331', 2, 2, 201, NULL),
(2014, 'Total', '20140228', '20150331', 2, 2, 321, NULL),
(2014, 'Closed', '20140228', '20150430', 2, 2, 231, NULL),
(2014, 'Total', '20140228', '20150430', 2, 2, 360, NULL),
(2014, 'Closed', '20140228', '20150531', 2, 2, 251, NULL),
(2014, 'Total', '20140228', '20150531', 2, 2, 386, NULL),
(2014, 'Closed', '20140228', '20150630', 2, 2, 283, NULL),
(2014, 'Total', '20140228', '20150630', 2, 2, 422, NULL),
(2014, 'Closed', '20140228', '20150731', 2, 2, 317, NULL),
(2014, 'Total', '20140228', '20150731', 2, 2, 452, NULL),
(2014, 'Closed', '20140228', '20150831', 2, 2, 346, NULL),
(2014, 'Total', '20140228', '20150831', 2, 2, 475, NULL),
(2014, 'Closed', '20140228', '20150930', 2, 2, 378, NULL),
(2014, 'Total', '20140228', '20150930', 2, 2, 486, NULL),
(2014, 'Closed', '20140228', '20151031', 2, 2, 405, NULL),
(2014, 'Total', '20140228', '20151031', 2, 2, 496, NULL),
(2014, 'Closed', '20140228', '20151130', 2, 2, 426, NULL),
(2014, 'Total', '20140228', '20151130', 2, 2, 501, NULL),
(2014, 'Closed', '20140228', '20151231', 2, 2, 448, NULL),
(2014, 'Total', '20140228', '20151231', 2, 2, 509, NULL);

SELECT Year,
       ClaimStatus,
       LossMonth,
       MAX ( ClaimTotalPerLossMonth )
FROM #claimcount
GROUP BY Year,
         ClaimStatus,
         LossMonth;

SELECT *
FROM #claimcount;

DROP TABLE #claimcount;

2 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了您的问题,但是也许您正在寻找类似的东西:

SELECT x.Year, x.ClaimStatus, x.LossMonth, 
    SUM(MaxClaimTotalPerLossMonth) AS MaxClaimTotalPerLossMonth
FROM (
    SELECT Year, ClaimStatus, LossMonth,
           MAX ( ClaimTotalPerLossMonth ) AS MaxClaimTotalPerLossMonth
    FROM #claimcount
    GROUP BY Year, ClaimStatus, LossMonth
) x GROUP BY GROUPING SETS ((Year, ClaimStatus, LossMonth), (Year, ClaimStatus));

答案 1 :(得分:0)

只需将您要计算的内容放入CTE中,就可以将其总计为总粒度:

;with t as(
SELECT Year,
       ClaimStatus,
       LossMonth,
       MAX ( ClaimTotalPerLossMonth )MaxClaims
       , sum(ClaimTotalPerLossMonth)ClaimCountPerLossYear
       , sum(ClaimTotalPerClaimMonth)ClaimTotalPerClaimMonth
       , sum(ClaimCount)ClaimCount
FROM #claimcount
GROUP BY Year,
         ClaimStatus,
         LossMonth
)
select * from t
union all
select 0,'GRAN TOTAL',NULL,sum(MaxClaims),sum(ClaimCountPerLossYear)
    ,sum(ClaimTotalPerClaimMonth),sum(ClaimCount)
from t