У меня есть запрос, который подсчитывает количество записей в таблице, содержащей количество заявок на ремонт, и результатом является количество выполненных заявок на ремонт по компаниям. Пример: Companycode | CompnayName | CountOfTickets
SELECT
Incident.CompanyCode, Count(Incident.CompanyCode) AS IncCount
FROM
Incident
GROUP BY
Incident.CompanyCode, Incident.IncidentType, Incident.IncidentClosed
HAVING
(((Incident.IncidentType)="On - Site") AND
((Incident.IncidentClosed)=True));
Теперь, что мне трудно уложить в голове, так это то, что каждая из подсчитываемых записей имеет поле для отметки тикета как соответствующего SLA. Поле представляет собой текстовое поле с "Y" или "N".
Я пытаюсь подсчитать количество записей в запросе выше, которые соответствуют критериям "Y" или "N", а затем разделить этот результат на количество основного запроса, чтобы получить процент заявок на ремонт, которые соответствуют критериям. Итак, из x количества заявок на ремонт для компании xyz, x% соответствуют SLA.
Я знаю, что это, скорее всего, потребует подзапроса, но я не уверен, как это закодировать или где поместить подзапрос.
Я хотел бы получить результат как часть той же таблицы результатов, т.е. Companycode | CompnayName | CountOfTickets | % Met SLA
Я не знаю, будет ли решение простым или нет, но я работаю над этим уже некоторое время и просто не вижу его.
Любая помощь будет высоко оценен.
Спасибо, что уделили время прочтению этой статьи и за любую оказанную помощь.
Грег
решение1
SELECT
CompanyName,
CompanyCode,
Count(*),
Sum(iif(MetSLA, 1, 0))/Count(*) * 100
FROM
Incident
WHERE
IncidentType = "On - Site"
AND IncidentClosed = Yes
GROUP BY
CompanyName, CompanyCode;
Объяснение: Sum(iif(MetSLA, 1, 0))
выражение фактически подсчитывает строки, где установлен флаг MetSLA (true/yes). Sum
применяется как агрегатная функция после группировки строк (как Count
is). Таким образом, вы получаете количество строк MetSLA=yes в процентах от строк для этой компании (так как группировка осуществляется по компаниям).