У меня есть следующий SQL
DECLARE @StatusOK int
DECLARE @StatusFailed int
SELECT @StatusOK = COUNT(Status) FROM tblAuditServiceLog WHERE Status = '1'
SELECT @StatusFailed = COUNT(Status) FROM tblAuditServiceLog WHERE Status = '2'
SELECT CompanyId, MethodCalled, tblSystemCompany.Description, @StatusOK as StatusOK, @StatusFailed as StatusFail
FROM tblAuditServiceLog
INNER JOIN tblSystemCompany ON tblAuditServiceLog.CompanyId = tblSystemCompany.SystemCompanyId
GROUP BY MyId, MethodCalled, tblSystemCompany.Description
Это работает, но счет не основан на CompanyId
(строке), он возвращает счетчик по таблице, поэтому он немного бесполезен.
Из двух таблиц, подобных этой
:: tblAuditServiceLog
| CompanyId | MethodCalled | Status |
| 232 | GetProducts | 1 |
:: tblSystemCompany
| SystemCompanyId | Description |
| 232 | MyCompany |
Где Status = 1 в порядке, 2 - Fail
В идеале я бы получил такой вывод ...
| CompanyId | MethodCalled | Description | StatusOK | StatusFail |
| 232 | GetProducts | MyCompany | 8 | 2 |
| 236 | GetProducts | MyCompanyB | 8 | 2 |
| 256 | GetBrands | MyCompanyC | 8 | 2 |
Я рассматриваю возможность использования курсоров и просто циклический просмотр и вывод в временную таблицу, но я предполагаю, что есть более оптимальный способ сделать это.
Любая помощь от некоторых гениев SQL Server приветствуется
Приведенные выше результаты (в соответствии с двумя запросами Select @) являются результатами подсчета всех Статусов = 1 (статус в норме) и всех статусов = 2 (сбой статуса), а не, как и должно быть, Статус = И CompanyId = 232
Таким образом, предполагая, что несколько компаний зарегистрированы, выполняя различные вызовы веб-службы, счет будет основываться на общем количестве «OK Status», а не на количестве для этой компании.