У меня есть база данных, как этотКак рассчитать такое же поле с различными критериями, на тот же запрос
| Contact | Incident | OpenTime | Country | Product |
| C1 | | 1/1/2014 | MX | Office |
| C2 | I1 | 2/2/2014 | BR | SAP |
| C3 | | 3/2/2014 | US | SAP |
| C4 | I2 | 3/3/2014 | US | SAP |
| C5 | I3 | 3/4/2014 | US | Office |
| C6 | | 3/5/2014 | TW | SAP |
Я хочу выполнить запрос с критериями по стране и и открытого времени, и я хочу получить обратно что-то вроде этого:
| Product | Contacts with | Incidents |
| | no Incidents | |
| Office | 1 | 1 |
| SAP | 2 | 2 |
Я могу легко получить одну часть для работы с запросом, как
SELECT Service, count(
FROM database
WHERE criterias AND Incident is Null //(or Not Null) depending on the row
GROUP BY Product
Что я ул прогибание - подсчет Инцидент - это Null, а Инцидент не является нулем в той же таблице в результате того же запроса, что и в приведенном выше примере.
Я попытался следующий
SELECT Service AS Service,
(SELECT count Contacts FROM Database Where Incident Is Null) as Contact,
(SELECT count Contacts FROM Database Where Incident Is not Null) as Incident
FROM database
WHERE criterias AND Incident is Null //(or Not Null) depending on the row
GROUP BY Product
Вопрос у меня есть с выше предложения является то, что независимо от критериев Я использую на «основной» выберите игнорируются вложенными Selects.
Я также пытался использовать UNION ALL, но не смог заставить его работать.
В конце концов я решил его с этим подходом: Я подсчитал общее количество контактов в продукт, подсчитывали число инцидентов, и добавил вычисляемое поле с результатом
SELECT Service, COUNT (Contact) AS Total, COUNT (Incident) as Incidents,
(Total - Incident) as Only Contact
From Database
Where <criterias>
GROUP BY Service
Хотя я заставить его работать, я до сих пор уверен, что для него существует более элегантный подход. Как я могу получить различные подсчеты в одном столбце с разными критериями подсчета в одном запросе?
Это отличный ответ. Я хожу по Гордону или простоту, но наверняка я тоже буду использовать их – Gabriel