如何计算sql server中两列的百分比?

时间:2014-04-05 18:33:06

标签: sql sql-server tsql

我有以下查询,它应该返回已通过和失败的活动数。

我在计算每一行的失败和已通过活动之间的百分比时,我们现在可以看到我返回0。

非常感谢任何帮助。

查询:

WITH CTE 
AS(
    select activityid,
    SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS Pass, 
    SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS Fail
    from mytable
    group by activityid
)
select activityid, pass, fail,
0 as passPercentage, 0 failPercentage
from cte

结果集:

activityid  pass    fail    passPercentage   failPercentage
1            26      22      0                    0
2            23      29      0                    0

1 个答案:

答案 0 :(得分:3)

试试这个:

WITH CTE 
AS(
    select activityid,
    SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS Pass, 
    SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS Fail
    from mytable
    group by activityid
)
select activityid, pass, fail,
 pass*100.0/(pass + fail) as passPercentage,
 fail*100.0/(pass + fail) as failPercentage
from cte

<强>更新

如果您有空活动。

WITH CTE 
AS(
    select activityid,
    SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) AS Pass, 
    SUM(CASE WHEN success = 0 THEN 1 ELSE 0 END) AS Fail
    from mytable
    group by activityid
)
select activityid, pass, fail,
 CASE WHEN pass + fail = 0 THEN 0 ELSE pass*100.0/(pass + fail) END as passPercentage,
 CASE WHEN pass + fail = 0 THEN 0 ELSE fail*100.0/(pass + fail) END as failPercentage
from cte