Во-первых, правильный запрос с использованием GROUP By означает, что независимо от результирующих полей, которые вы пытаетесь вернуть, ваша GROUP by должна включать ВСЕ поля, к которым не применена агрегация (min, max, sum, avg и т. Д.).чего не хватает, так это того, что в списке есть дополнительный столбец, который не агрегируется, но также не является частью группы по.Так что либо добавьте это неагрегированное поле в группу (даже если последнее поле в группе), либо примените к нему некоторую агрегацию.
Теперь, очистка для читабельности вашего исходного запроса для читабельности того, чтоэто где и / или подзапрос следующего.
SELECT
SUM(PLG.Qty) AS TotQty,
SUM(PLG.ScrapQty) AS ScrpQty,
( SELECT SUM(PLL.Qty)
FROM ProductionLog AS PLL
INNER JOIN ProductionPlan PPP
ON PPP.PlanId = PLL.PlanId
WHERE
DATE(LogDateTime) = DATE(PLG.LogDateTime)
AND LogType = 8
AND PPP.StationId = PP.StationId ) AS RwrkQty,
DATE(PLG.LogDateTime) AS LogDate,
S.StationName
FROM
ProductionLog AS PLG
INNER JOIN ProductionPlan AS PP
ON PLG.PlanId = PP.PlanId
INNER JOIN Station AS S
ON S.StationId = PP.StationId
WHERE
PLG.Logtype IN (4)
GROUP BY
S.StationId,
DATE(PLG.LogDateTime)
В вашем сценарии ваш 3-й столбец, основанный на запросе, уже агрегирован ВНУТРИ, но для запроса OUTER это НЕагрегируются.Чтобы упростить это, просто оберните его в MIN (), например
MIN( ( SELECT SUM(PLL.Qty)
FROM ProductionLog AS PLL
INNER JOIN ProductionPlan PPP
ON PPP.PlanId = PLL.PlanId
WHERE
DATE(LogDateTime) = DATE(PLG.LogDateTime)
AND LogType = 8
AND PPP.StationId = PP.StationId ) ) AS RwrkQty,
Поскольку внутренний запрос всегда возвращает только 1 строку, суммирование 1 строки в любом случае вернет одно и то же значение.