我有一個在where子句中使用列,但不返回該列的查詢:當我GROUP BY
子句中運行這個沒有t1.StoreID
爲什麼我必須在group by中包含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
我得到的錯誤:
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子句中使用它,您還在* Column *子查詢的WHERE子句中使用它。列子查詢與列本身具有相同的約束。嘗試將子查詢中的SUM(..)從surrond中移出幷包含子查詢。 – RBarryYoung