Вы должны скобки вокруг условий OR-нут (и должны использовать JOIN обозначения):
SELECT DISTINCT
a.AssignedEmp,
COUNT(a.TipoStatus) AS 'Service Request Count'
FROM Service AS a
JOIN employee AS b ON a.AssignedEmp = b.UserName
WHERE b.Classification_ClassificationID = 2
AND (a.TipoStatus = 'Open'
OR a.TipoStatus = 'Pending'
OR a.TipoStatus = 'Hold'
OR a.TipoStatus = 'Warranty')
GROUP BY a.AssignedEmp
LIMIT 0, 30
Или вы можете записать условие непосредственно в терминах 'не закрыто':
SELECT DISTINCT
a.AssignedEmp,
COUNT(a.TipoStatus) AS 'Service Request Count'
FROM Service AS a
JOIN employee AS b ON a.AssignedEmp = b.UserName
WHERE b.Classification_ClassificationID = 2
AND a.TipoStatus != 'Closed'
GROUP BY a.AssignedEmp
LIMIT 0, 30
Как первоначально написано, предложение WHERE было эквивалентно:
WHERE (b.Classification_ClassificationID = 2 AND a.TipoStatus = 'Open')
OR a.TipoStatus = 'Pending'
OR a.TipoStatus = 'Hold'
OR (a.TipoStatus = 'Warranty' AND a.AssignedEmp = b.UserName)
Подсчитывает все элементы Open, имеющие идентификатор классификации 2 для пользователя; он также учитывает все ожидающие пункты обслуживания независимо от идентификатора классификации и всех элементов обслуживания «Удержание» независимо от идентификатора классификации и всех пунктов обслуживания гарантии, назначенных пользователю, независимо от идентификатора классификации. GROUP BY фильтрует вещи так, чтобы учитывались только элементы с нужным назначенным сотрудником, но для некоторых терминов есть частичный кросс-продукт, приводящий к раздутым подсчетам.
Это для MySQL, SQLite или PostgreSQL? –
@OMG, вы знаете, что есть _other_ СУБД? :-) – paxdiablo
@paxdiablo: Только три, которые я знаю, поддерживают «LIMIT». И не называйте меня «Ширли»: p –