У меня есть запрос, который использует столбец в выражении WHERE, но не возвращает этот столбец:Почему я должен включать столбец where where в группу, если я не возвращаю этот столбец в качестве результата ?, как я могу агрегировать повторяющиеся результаты?
SELECT
t1.upc, l1.description, l1.size,
l2.Name AS SectionName, l1.section, l3.Name, l1.department,
(SELECT SUM(QuantitySold)
FROM ProductMovement
JOIN ProductsMaster ON ProductsMaster.upc = ProductMovement.upc
WHERE TimeID >= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2016')
AND TimeID <= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2017')
AND ProductsMaster.upc = l1.upc
AND (l1.department = 4 OR l1.department = 13)
AND (t1.StoreID = 3 OR t1.StoreID = 9 OR t1.StoreID = 2)) AS Qty,
(SELECT SUM(TotalSales)
FROM ProductMovement
JOIN ProductsMaster ON ProductsMaster.upc = ProductMovement.upc
WHERE TimeID >= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2016')
AND TimeID <= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2017')
AND ProductsMaster.upc = l1.upc
AND (l1.department = 4 OR l1.department = 13)
AND (t1.StoreID = 3 OR t1.StoreID = 9 OR t1.StoreID = 2)) AS Sales
FROM
ProductMovement t1
JOIN
ProductsMaster l1 ON l1.upc = t1.upc
JOIN
EnterpriseSections l2 ON l2.SectionID = l1.section
JOIN
EnterpriseDepartments l3 ON l3.DepartmentID = l1.department
WHERE
(SELECT SUM(QuantitySold)
FROM ProductMovement
JOIN ProductsMaster ON ProductsMaster.upc = ProductMovement.upc
WHERE TimeID >= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2016')
AND TimeID <= (SELECT TimeID
FROM Time
WHERE FactDate = '1/14/2017')
AND ProductsMaster.upc = l1.upc
AND (l1.department = 4 OR l1.department = 13)
AND (t1.StoreID = 3 OR t1.StoreID = 9 OR t1.StoreID = 2)) IS NOT NULL
GROUP BY
l1.upc, t1.upc, l1.section, l2.Name, l1.description, l1.size, l1.department, l3.Name
Когда я запускаю это без t1.StoreID
в пункте GROUP BY
я получаю ошибку:
Column 'ProductMovement.StoreID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
Когда я добавляю столбец в группу, я получаю повторяющиеся результаты для каждого t1.storeID
, потому что я все равно собираю все свои данные.
Почему мне нужно группировать столбец, который я не возвращаю, и как я могу суммировать эти результаты?
Было бы полезно объяснить, чего вы пытаетесь достичь, предпочтительно включая диаграмму сущностей и отношений, описывающую взаимосвязь между многими таблицами, на которые вы ссылались. –
Поскольку технически вы используете не только его в предложении WHERE вашего запроса, вы также используете его в предложении WHERE обоих ваших подкатегорий * Column *. Подзапросы столбцов имеют те же ограничения, что и сами столбцы. Попробуйте переместить 'SUM (..)' s из подзапросов в surrond и вместо этого содержать подзапросы. – RBarryYoung