无法使用 SUM 函数处理我的查询

Can't get the SUM function to work with my query

我正在尝试对按区域分组的一些仓库库存值求和,但无法正常工作。

以下查询 returns 所有 material 库存。同样的 material 被放置在更多的位置,更多的区域。因此 material AAA 可以位于 111 区的两个位置和 222 区的三个位置

SELECT  Zones.Label,
    Materials.Material,
    Shelves.Label as ShelfLabel,
    Items.StockQty

    FROM Zones INNER JOIN
        (dbo.LangTexts(null) AS Texts INNER JOIN (WarehouseStatus INNER JOIN
              (Shelves INNER JOIN (Positions INNER JOIN
                    (Materials INNER JOIN Items
                    ON Materials.Material = Items.Material)
                    ON Positions.ID = Items.Owner)
                    ON Shelves.ID = Positions.Owner)
                    ON WarehouseStatus.Status = Items.Status)
                    ON Texts.TextID = WarehouseStatus.Text)
                    ON Zones.ID = Shelves.Owner
    WHERE Zones.Label IS NOT NULL   
    ORDER BY Materials.Material, Zones.Label

输出:

output screenshot

由于我已尝试在屏幕截图中进行标记,因此我需要按区域(标签列)分组的总 StockQty

我试图通过像这样修改查询来实现这一点。

SELECT  Zones.Label,
    Materials.Material,
    Shelves.Label as ShelfLabel,
    SUM(Items.StockQty)

    FROM Zones INNER JOIN
        (dbo.LangTexts(null) AS Texts INNER JOIN (WarehouseStatus INNER JOIN
              (Shelves INNER JOIN (Positions INNER JOIN
                    (Materials INNER JOIN Items
                    ON Materials.Material = Items.Material)
                    ON Positions.ID = Items.Owner)
                    ON Shelves.ID = Positions.Owner)
                    ON WarehouseStatus.Status = Items.Status)
                    ON Texts.TextID = WarehouseStatus.Text)
                    ON Zones.ID = Shelves.Owner
    WHERE Zones.Label IS NOT NULL   
    GROUP BY Zones.Label
    ORDER BY Materials.Material, Zones.Label

但是一直报如下错误

Msg 8120, Level 16, State 1, Line 6 Column 'Materials.Material' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

我以前一直在处理这样的错误,但不明白我做错了什么。有时我通过来回更改查询来成功,但这次我真的卡住了。

希望有人能指导我。

提前致谢。


由于 Shelves.Label 列实际上在这件事上没有带来任何价值,我最终根据@Md.SumanKabir 的回答得到以下查询。

SELECT  Zones.Label,
    Materials.Material,
    SUM(Items.StockQty)

    FROM Zones INNER JOIN
        (dbo.LangTexts(null) AS Texts INNER JOIN (WarehouseStatus INNER JOIN
              (Shelves INNER JOIN (Positions INNER JOIN
                    (Materials INNER JOIN Items
                    ON Materials.Material = Items.Material)
                    ON Positions.ID = Items.Owner)
                    ON Shelves.ID = Positions.Owner)
                    ON WarehouseStatus.Status = Items.Status)
                    ON Texts.TextID = WarehouseStatus.Text)
                    ON Zones.ID = Shelves.Owner
    WHERE Zones.Label IS NOT NULL   
    GROUP BY Zones.Label, Materials.Material
    ORDER BY Materials.Material, Zones.Label

正确的查询是:

SELECT  Zones.Label,
Materials.Material,
Shelves.Label as ShelfLabel,
SUM(Items.StockQty)
FROM Zones INNER JOIN
    (dbo.LangTexts(null) AS Texts INNER JOIN (WarehouseStatus INNER JOIN
          (Shelves INNER JOIN (Positions INNER JOIN
                (Materials INNER JOIN Items
                ON Materials.Material = Items.Material)
                ON Positions.ID = Items.Owner)
                ON Shelves.ID = Positions.Owner)
                ON WarehouseStatus.Status = Items.Status)
                ON Texts.TextID = WarehouseStatus.Text)
                ON Zones.ID = Shelves.Owner
WHERE Zones.Label IS NOT NULL   
GROUP BY Zones.Label, Materials.Material, Shelves.Label
ORDER BY Materials.Material, Zones.Label

您需要使用 GROUP BY 中的列,这些列未在 SUM

等任何聚合函数中使用

您可以获得有关如何使用 GROUP BY Here

的更多信息

这里的问题是您的分组与您的 select 不匹配。您 select 3 列 Zones.LabelMaterials.MaterialShelves.Label,但您仅按 Zones.Label 分组。因此,它不知道如何处理其他 2 列。

您要么必须像处理总和那样汇总它们,要么必须将它们添加到分组中。