SQL列百分比(具有多个分组依据)

时间:2020-02-29 18:19:28

标签: sql group-by percentage

上下文

我有这个视图/展览,列出了发送日期,客户名称,客户位置,拒绝类型,IDClientPosition总数和IDRefusal总数的记录。我使用它来检查每个日期发送,接受,拒绝的索赔数量以及每个客户为何拒绝它们。 (我有用于ClientPosition,拒绝和客户的相关表格)

  DtSent    |  IDClient | IDClientPosition | TOTAL Position | IDRefusal | TOTAL Refusal
---------------------------------------------------------------------------------------------
2020-01-10         1             1                 40           NULL           0
2020-01-10         1             1                 3              7            3
2020-01-10         1             2                 1            NULL           0
2020-02-10         2             2                 27             1           27
2020-02-10         2             2                 13             2           13    

到目前为止,查询显示了以上值:

SELECT        TOP (100) PERCENT dbo.LBA.DtSent, dbo.Claims.IDClient, dbo.LBA.IDClientPosition, 
           COUNT(dbo.LBA.IDClientPosition) AS [TOTAL Position], dbo.LBA.IDRefusal, 
           COUNT(dbo.LBA.IDRefusal) AS [TOTAL Refusal]
FROM            dbo.LBA INNER JOIN
             dbo.ClientPositionLBA ON dbo.LBA.IDClientPosition = 
             dbo.ClientPositionLBA.IDClientPositLBA LEFT OUTER JOIN
             dbo.RefusalLBA ON dbo.LBA.IDRefusal = dbo.RefusalLBA.IDRefusal LEFT OUTER JOIN
             dbo.Claims LEFT OUTER JOIN
             dbo.Clients ON dbo.Claims.IDClient = dbo.Clients.IDClients ON 
             dbo.LBA.ClaimID = dbo.Claims.ClaimID
GROUP BY dbo.LBA.IDClientPosition, dbo.Claims.IDClient, dbo.LBA.IDRefusal, dbo.LBA.DtSent

我想要的东西

我想根据TOTAL Position和TOTAL Refusal的值添加2列以百分比表示。

有了这个,除了我已经拥有的总价值(计数)外,我还可以知道每个客户在那个日期接受,拒绝的索赔数量的百分比以及合理性(IDRefusal)。总结起来,就像将这些总价值转换为百分比一样。

每个月总共20个客户中,每个客户应该有大约100条记录,因此必须考虑性能。我尝试了网上发现的零散东西,但无济于事。

1 个答案:

答案 0 :(得分:0)

除以总数:

COUNT(dbo.LBA.IDClientPosition) * 1.0 / COUNT(*),
COUNT(dbo.LBA.IDRefusal) * 1.0 / COUNT(*)

* 1.0是因为某些数据库进行整数除法。 * 1.0产生一个带小数的数字,因此计算更加精确。