У меня есть два запроса:
- Суммирует ежедневные показания по нулевому времени (нормированному или ранжированному) — время уходит из уравнения.
- Будут показания CUM через раз, нарастающим итогом.
Я хотел бы объединить их, чтобы иметь совокупный вывод нормализованных/нулевых по времени/ранжированных данных.
Вот запрос нулевого времени (1):
SELECT Sum([_Group_Norm_Query].Sales) AS SumOfSales
FROM (SELECT
tblTempGroupNorm.Prop_KEY,
tblTempGroupNorm.ReadingDate,
tblTempGroupNorm.Sales,
(SELECT COUNT(Table1A.ReadingDate) FROM tblTempGroupNorm AS Table1A
WHERE Table1A.ReadingDate<=tblTempGroupNorm.ReadingDate
AND Table1A.Prop_KEY = tblTempGroupNorm.Prop_KEY) AS TimeDay
FROM
tblProperties INNER JOIN tblTempGroupNorm ON tblProperties.WH_IDX = tblTempGroupNorm.Prop_KEY
WHERE (((tblProperties.GROUP)='MY GROUP') AND ((tblProperties.AREA)='MY AREA')) ORDER BY
tblTempGroupNorm.ReadingDate) AS [_Group_Norm_Query]
GROUP BY[_Group_Norm_Query].TimeDay;
А вот промежуточный итоговый запрос (2):
SELECT Sum(a2.Sales) AS SumOfSales
FROM tblTempGroupNorm AS a1 INNER JOIN (tblTempGroupNorm AS a2 INNER JOIN tblProperties ON a2.Prop_KEY = tblProperties.WH_IDX) ON a1.Prop_KEY = tblProperties.WH_IDX
WHERE (((a2.ReadingDate)<=[a1].[ReadingDate]) AND (([tblProperties].[GROUP])='MY GROUP') AND (([tblProperties].[AREA])='MY AREA'))
GROUP BY a1.ReadingDate
ORDER BY a1.ReadingDate;
Есть мысли о совмещении этих двух вещей? Я избегаю использования DSUM() в промежуточном итоге и не могу использовать его в финальном комбинированном запросе. Спасибо
Редактировать. Следуя отзывам, я попытаюсь их объединить. Я получаю сообщение об ошибке:
запрос не включает указанное выражение
'COUNT(a2.ReadingDate) = [_Group_Norm_Query].TimeDay
как часть агрегатной функции.
Если я удалю самую последнюю строку (GOUP BY [_Group_Norm_Query].TimeDay;
, ошибка будет подавлена, но запрос никогда не завершится - он зависнет.
SELECT Sum([_Group_Norm_Query].Sales) AS SumOfSales, Sum(RunTotal.SumOfSales) AS MY_RUNNING_TOTAL
SELECT Sum(a2.Sales) AS SumOfSales
FROM tblTempGroupNorm AS a1 INNER JOIN (tblTempGroupNorm AS a2 INNER JOIN tblProperties ON a2.Prop_KEY = tblProperties.WH_IDX) ON a1.Prop_KEY = tblProperties.WH_IDX
WHERE (((a2.ReadingDate)<=[a1].[ReadingDate]) AND (([tblProperties].[GROUP])='MY GROUP') AND (([tblProperties].[AREA])='MY AREA'))
GROUP BY a1.ReadingDate
HAVING COUNT(a2.ReadingDate) = [_Group_Norm_Query].TimeDay
ORDER BY a1.ReadingDate) AS RunTotal
FROM (SELECT
tblTempGroupNorm.Prop_KEY,
tblTempGroupNorm.ReadingDate,
tblTempGroupNorm.Sales,
(SELECT COUNT(Table1A.ReadingDate) FROM tblTempGroupNorm AS Table1A
WHERE Table1A.ReadingDate<=tblTempGroupNorm.ReadingDate
AND Table1A.Prop_KEY = tblTempGroupNorm.Prop_KEY) AS TimeDay
FROM
tblProperties INNER JOIN tblTempGroupNorm ON tblProperties.WH_IDX = tblTempGroupNorm.Prop_KEY
WHERE (((tblProperties.GROUP)='MY GROUP') AND ((tblProperties.AREA)='MY AREA')) ORDER BY
tblTempGroupNorm.ReadingDate) AS [_Group_Norm_Query]
GROUP BY[_Group_Norm_Query].TimeDay;
DSum
по сути является подзапросом. Почему бы не добавить второй запрос в первый как второй подзапрос после TimeDay? - person Parfait   schedule 19.03.2015HAVING
послеGROUP BY
во второй запрос, который я предлагаю использовать в качестве подзапроса в первом:HAVING COUNT(a2.ReadingDate) = [_Group_Norm_Query].TimeDay
- person Parfait   schedule 24.03.2015HAVING
после самой первой строки внешнего основного запроса:SELECT Sum([_Group_Norm_Query].Sales) AS SumOfSales
. Точно так же, как самая последняяGROUP BY
строка, которая является частью внешнего основного запроса, TimeDay должен быть распознан. - person Parfait   schedule 25.03.2015