У меня есть одна таблица, в которой показаны развертывания сотрудников для различных типов развертываний в заданном месте для каждого месяца:
ID | Location_ID | Date | NumEmployees | DeploymentType_ID
В качестве примера можно привести несколько записей:
1 | L1 | 12/2010 | 7 | 1 (=Permanent)
2 | L1 | 12/2010 | 2 | 2 (=Temp)
3 | L1 | 12/2010 | 1 | 3 (=Support)
4 | L1 | 01/2011 | 4 | 1
5 | L1 | 01/2011 | 2 | 2
6 | L1 | 01/2011 | 1 | 3
7 | L2 | 12/2010 | 6 | 1
8 | L2 | 01/2011 | 6 | 1
9 | L2 | 12/2010 | 3 | 2
Что мне нужно сделать, так это суммировать людей разных типов по дате, чтобы результаты выглядели примерно так:
Date | Total Perm | Total Temp | Total Supp
12/2010 | 13 | 5 | 1
01/2011 | 10 | 2 | 1
В настоящее время я создал отдельный запрос для каждого типа развертывания, который выглядит следующим образом:
SELECT Date, SUM(NumEmployees) AS "Total Permanent"
FROM tblDeployment
WHERE DeploymentType_ID=1
GROUP BY Date;
Мы назовем этот запрос qSumPermDeployments. Затем я использую пару объединений для объединения запросов:
SELECT qSumPermDeployments.Date, qSumPermDeployments.["Total Permanent"] AS "Permanent"
qSumTempDeployments.["Total Temp"] AS "Temp"
qSumSupportDeployments.["Total Support"] AS Support
FROM (qSumPermDeployments LEFT JOIN qSumTempDeployments
ON qSumPermDeployments.Date = qSumTempDeployments.Date)
LEFT JOIN qSumSupportDeployments
ON qSumPermDeployments.Date = qSumSupportDeployments.Date;
Обратите внимание, что в настоящее время я создаю этот последний запрос, исходя из предположения, что в местоположении будут только временные или вспомогательные сотрудники, если у них также есть постоянные сотрудники. Таким образом, я могу создавать объединения, используя результаты постоянного сотрудника в качестве базовой таблицы. Учитывая все данные, которые у меня есть в настоящее время, это предположение остается в силе, но в идеале я бы хотел отойти от этого предположения.
Итак, наконец, мой вопрос. Есть ли способ упростить это до одного запроса или лучше разделить его на несколько запросов - если ни по какой другой причине эта удобочитаемость.