2014-10-24 2 views
0

У меня есть следующий код, который сообщает мне, какие позиции находятся в и из SLA.Процент подсчета процентов с использованием оператора SQL CASE

Как я могу превратить это в %, так, например, когда я их добавлю, он покажет 98% SLA Met.

,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 в новом заявлении.

+0

Вы можете изменить свой вопрос и показать образцы данных и желаемых результатов? –

+0

Похоже, что ваш второй запрос как ошибка, вы получили 'YesSLA' вместо' SLA'. –

ответ

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'; 
+0

приведенное выше дает мне ошибку. ORA-00923: FROM ключевое слово не найдено, где ожидалось 00923. 00000 - «Ключевое слово FROM не найдено, где ожидалось» – user3580480

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 
Смежные вопросы