使用SQL CASE语句计算百分比计数

时间:2014-10-24 12:43:48

标签: sql oracle

我有以下代码,告诉我哪些订单项进出SLA

如何将其转换为%,例如,当我将它们添加到一起时,它将显示98%SLA遇见。

,CASE 
WHEN m.COMPLETED_DT is NULL THEN ''
WHEN m.COMPLETED_DT <= m.SLA_ADJUSTED_DT  THEN 'SLA Met' 
WHEN m.SLA_ADJUSTED_DT IS NULL THEN 'SLA Met' 
ELSE 'SLA Missed' END AS "SLA Desc"

如果我已经得到了结果,我认为它看起来像......

SELECT (count(*) * 100 / (select count(*) FROM testtable)) AS YesSLA 
FROM testtable where SLA='Yes';

我不确定如何将其与我当前的陈述相结合,我不相信我可以在新陈述中引用AS SLA Desc

2 个答案:

答案 0 :(得分:1)

这样做你想要的吗?

select 100 * avg(case when m.completed_dt <= m.SLA_ADJUSTED_DT or m.SLA_ADJUSTED_DT is null
                      then 1.0 else 0
                 end)
from testtable
where SLA = 'Yes';

答案 1 :(得分:0)

下面的代码通过仅计算符合SLA的值然后除以总机会来计算100%符合SLA的百分比。

DECLARE @Data TABLE (COMPLETED_DT DATETIME, SLA_ADJUSTED_DT DATETIME)
INSERT @Data VALUES ('5/5/2014', '5/6/2014'), ('5/6/2014', '5/6/2014'), ('5/7/2014', '5/6/2014')

SELECT
    CONVERT(FLOAT, SUM(CASE WHEN COMPLETED_DT <= SLA_ADJUSTED_DT THEN 1 ELSE 0 END)) * 100 / COUNT(1) AS [% Met SLA]
FROM @Data

<强>输出

% Met SLA
----------------------
66.6666666666667