Impossible de faire fonctionner la fonction SUM avec ma requête


OWB

J'essaie de sommer certaines valeurs de stock d'entrepôt, regroupées par zones, mais je n'arrive pas à le faire fonctionner.

La requête suivante renvoie tous les articles en stock. Le même matériau est placé sur plus d'emplacements, dans plus de zones. Ainsi le matériel AAA peut être localisé sur deux emplacements dans la zone 111, et trois emplacements dans la zone 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

Sortir:

capture d'écran de sortie

Comme j'ai essayé de baliser dans la capture d'écran, j'ai besoin du StockQty total regroupé par zone (colonne d'étiquette)

J'essaie d'y parvenir en modifiant la requête comme ceci.

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

Mais il continue de retourner l'erreur suivante.

Msg 8120, niveau 16, état 1, ligne 6 La colonne « Materials.Material » n'est pas valide dans la liste de sélection car elle n'est contenue ni dans une fonction d'agrégat ni dans la clause GROUP BY.

J'ai déjà eu affaire à une telle erreur, mais je ne comprends pas exactement ce que je fais mal. Parfois, je réussis en changeant la requête d'avant en arrière, mais cette fois, je suis vraiment coincé.

J'espère que quelqu'un est possible de me guider.

Merci d'avance.


Comme la colonne Shelves.Label n'apporte en fait aucune valeur à ce sujet, je me suis retrouvé avec la requête suivante basée sur la réponse de @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
Maryland Souman Kabir |

La requête correcte serait :

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

Vous devez utiliser les colonnes de GROUP BY qui ne sont utilisées dans aucune fonction d'agrégat comme SUM

Vous pouvez obtenir plus d'informations sur l'utilisation de GROUP BY ici

Articles connexes


mysql - impossible de faire fonctionner la requête

Andrew Newby Je ne peux pas pour la vie de moi voir ce qui ne va pas ici. C'est probablement quelque chose de stupide, mais je suis aveugle pour le moment! J'ai une question: SELECT Links.Title, (6371 * acos( cos( radians(43.4347229) ) * cos( radians( Links.L

Impossible de faire fonctionner SaveFileDialog avec ma page Web

user616076 J'essaie d'ajouter une méthode qui utilise un lien de ma vue de grille puis récupère le fichier du serveur sous la forme d'un flux, puis demande à l'utilisateur où l'enregistrer. J'ai ajouté la référence System.Windows.Forms à mon contrôleur, puis j

Impossible de faire fonctionner la fonction RETURNS

MSLV Je n'arrive pas à faire fonctionner les retours. J'ai indiqué le type de commande, mais le script ne reconnaissant que le type de livraison. Je veux que les retours soient tarifés au prix + 20, en utilisant les paramètres STANDARD. Comment je le répare? I

Impossible de faire fonctionner la fonction WORKDAY avec un COUNTIF

Alex Atkinson Essayer de travailler sur un système au travail qui dira combien de codes d'erreur ont été enregistrés par une machine particulière le jour ouvrable précédent. Cette feuille de calcul devra pouvoir sélectionner uniquement les erreurs générées à l