Как использовать предложение Group By, когда мы используем функцию Aggregate в объединениях?

Я хочу объединить три таблицы и вычислить сумму (количество) таблицы A. Я что-то попробовал и получил желаемый результат. Но все же у меня есть путаница, связанная с агрегатной функцией и предложением Group By.

При вычислении значения суммы путем объединения двух или более таблиц, какие столбцы нам нужно указать в предложении Group By и почему нам нужно указать эти столбцы?

Например: вот моя таблица и желаемый запрос.

TableA: ItemID, JobOrderID, CustomerID, DivisionID, Quantity
TableB: ItemID, ItemName, SpecificationID
TableC: SpecificationID, SpecificationName
TableD: DivisionID, DivisionName
TableE: JobOrderID, JobOrderNo.
TableF: CustomerID, CustomerName

Я хочу получить сумму (количество) на основе ItemID , CustomerID , JobOrderID и DivisionID .

Я написал следующий запрос, и он работает нормально. Но если я удалю какой-либо столбец в предложении Group By, это не даст желаемого результата. Зачем? Что здесь делает предложение Group By? Как указать предложение Group By при использовании функции Aggregate? Вот мой запрос.

    SELECT 
            B.ItemName + ' - ' + C.SpecificationName AS 'ItemName',
            SUM(A.Quantity) AS 'Quantity',
            A.ItemID,
            D.DivisionName,
            F.CustomerName,
            E.JobOrderNo,
            A.DivisionID,
            A.JobOrderID,
            A.CustomerID

    FROM
            TableA A  
            INNER JOIN TableB B ON B.ItemID = A.ItemID 
            INNER JOIN TableC C ON C.SpecificationID = B.SpecificationID
            INNER JOIN TableD D ON D.DivisionID = A.DivisionID
            LEFT JOIN TableE E ON E.JobOrderID = A.JobOrderID
            LEFT JOIN TableF F ON F.CustomerID = A.CustomerID
    WHERE
            A.ItemID = @ItemID
    GROUP BY
            A.ItemID,
            A.JobOrderID,
            A.DivisionID,
            A.CustomerID,
            D.DivisionName,
            F.CustomerName,
            E.JobOrderNo,
            B.ItemName,
            C.SpecificationName

Любой, пожалуйста, выскажите свое мнение о пункте «Группировать по», рассмотрев это в качестве примера.

7
задан Community 4 February 2014 в 09:37
поделиться