SQL SELECT несколько с суммой - PullRequest
3 голосов
/ 13 декабря 2011

Я пытаюсь сделать СУММУ выбора, одновременно делая другие операции выбора.Мой текущий скрипт:

SELECT Orders.OrderID,SUM(Trackingnumbers.Shipment_Cost) AS Shipping_Cost
FROM Orders 
INNER JOIN Trackingnumbers
ON Orders.OrderID = TrackingNumbers.OrderID
WHERE Orders.OrderStatus = 'Shipped' AND Orders.ShipDate > (GETDATE()-6) AND Orders.PaymentAmount = Orders.Total_Payment_Received
Group By Orders.OrderID

Я хочу ВЫБРАТЬ больше столбцов, но не могу, потому что я использую функцию SUM, поэтому она не работает, как я могу отделить функции суммы от остальных атрибутовТаким образом, в файле CSV есть все столбцы плюс сумма Trackingnumber.Shipment_Cost в одном столбце?

Ответы [ 4 ]

8 голосов
/ 13 декабря 2011

Вы можете использовать подзапрос.

SELECT *
    ,(
        SELECT SUM(Shipment_Cost)
        FROM Trackingnumbers
        WHERE Trackingnumbers.OrderID = Orders.OrderID
    ) AS Shipping_Cost
FROM Orders
WHERE Orders.OrderStatus = 'Shipped'
    AND Orders.ShipDate > (GETDATE()-6)
    AND Orders.PaymentAmount = Orders.Total_Payment_Received
3 голосов
/ 13 декабря 2011

Идея в том, что вы используете запрос агрегации (с GROUP BY).Это означает, что столбцы, которые вы возвращаете, обычно должны быть результатом агрегатной функции или чего-то, с чем вы группируете.

В зависимости от используемой вами платформы, некоторые имеют функцию «Первая», которая может быть полезной.

2 голосов
/ 13 декабря 2011

Есть несколько способов получить его.

I.Примените статистическую функцию к каждому столбцу, который вы хотите иметь в своем результате

SELECT Orders.OrderID, MAX(Orders.ShipDate) As ShipDate, MAX(Orders.OrderStatus) As OrderStatus, SUM(Trackingnumbers.Shipment_Cost) AS Shipping_Cost
FROM Orders 
INNER JOIN Trackingnumbers
ON Orders.OrderID = TrackingNumbers.OrderID
WHERE Orders.OrderStatus = 'Shipped' AND Orders.ShipDate > (GETDATE()-6) AND Orders.PaymentAmount = Orders.Total_Payment_Received
Group By Orders.OrderID

II.Поместите все поля в предложение GROUP BY

SELECT Orders.OrderID, Orders.ShipDate, Orders.OrderStatus, SUM(Trackingnumbers.Shipment_Cost) AS Shipping_Cost
FROM Orders 
INNER JOIN Trackingnumbers
ON Orders.OrderID = TrackingNumbers.OrderID
WHERE Orders.OrderStatus = 'Shipped' AND Orders.ShipDate > (GETDATE()-6) AND Orders.PaymentAmount = Orders.Total_Payment_Received

III.Используйте подзапрос

SELECT *, (SELECT SUM(Trackingnumbers.Shipment_Cost)
FROM Trackingnumbers
WHERE TrackingNumbers.OrderID=Orders.OrderID) AS Shipping_Cost
WHERE Orders.OrderStatus = 'Shipped' AND Orders.ShipDate > (GETDATE()-6) AND    Orders.PaymentAmount = Orders.Total_Payment_Received FROM Orders
0 голосов
/ 13 декабря 2011

Вы можете сделать еще один запрос на основе результатов запроса, например:

select b.aaa,b.bbb from (
    SELECT Orders.OrderID,SUM(Trackingnumbers.Shipment_Cost) AS Shipping_Cost
FROM Orders 
INNER JOIN Trackingnumbers
ON Orders.OrderID = TrackingNumbers.OrderID
WHERE Orders.OrderStatus = 'Shipped' AND Orders.ShipDate > (GETDATE()-6) AND Orders.PaymentAmount = Orders.Total_Payment_Received
Group By Orders.OrderID) as a,Orders b where a.OrderID = b.OrderID.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...