首页 > 解决方案 > SQL 查找百分比

问题描述

我需要帮助找出这个 SQL 问题的查询 -

查找过去 12 个月中每个州(状态)在其 SLA 内每月处理的索赔百分比。

谢谢!

Id   **l** ClaimID **l** StatusID **l**      CreatedDate        **l** CreatedBy
===========================================================================
1174 **l**   977   **l**    1     **l** 2018-06-01 18:01:31.387 **l**     1
---------------------------------------------------------------------------
1175 **l**   978   **l**     1    **l** 2018-06-01 18:01:31.387 **l**     1
---------------------------------------------------------------------------
1176 **l**   979   **l**    1     **l** 2018-06-01 18:01:31.387 **l**     1
---------------------------------------------------------------------------
1177 **l**   980   **l**     1    **l** 2018-06-01 18:01:31.403 **l**     1
---------------------------------------------------------------------------
1178 **l**   981   **l**     1    **l** 2018-06-01 18:01:31.403 **l**     1
---------------------------------------------------------------------------

标签: sqlsql-server

解决方案


你可以试试这个。

   SELECT 
    StatusID
   ,count(StatusID) AS CountOfGroupedStatusIDs
   ,sum(count(*)) OVER() AS TotalAmountOfItems
   ,100.00 * count(StatusID) / sum(count(*)) OVER() AS Perc

  FROM Table

  WHERE CreatedDate BETWEEN DATEADD(month, DATEDIFF(month, 0, DATEADD(MONTH, -12, GETDATE())), 0) AND GETDATE()

  GROUP BY StatusID

它按 statusID/States 分组,然后计算每组有多少个状态,并对表中的所有状态进行计数,然后从这些值中创建一个百分比。

WHERE 子句只是说 FROM TODAY 减去 12 个月,但设置了开始日期过滤器,以便该月从第 1 天开始,而不是从今天开始的 12 个月,例如第 27 天。

如果您想将其更改为从今天开始的 12 个月。这将是:

WHERE CreatedDate BETWEEN DATEADD(MONTH, -12, GETDATE()) AND GETDATE()

推荐阅读