2011-12-13 41 views
3

我试图做一个选择SUM,同时做其他选择。我现在的脚本:SQL SELECT与总和

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的总和?

回答

6

您可以使用子查询。

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 
+0

我在哪里可以放置其他项目? – henryaaron

+0

@ user1090389我假设你只是想在'Orders'表中的列,它应该被'*'覆盖,或者是你自己从表中选择的列。 –

+0

我试图把我自己的,但它不会工作。它与*一起工作,但是当我用Orders.SalesRepCustomerID,Orders.COGS代替*时,它不起作用。 – henryaaron

2

这里的想法是您正在使用聚合查询(使用GROUP BY)。这意味着你返回的列通常应该是聚合函数的结果或者你正在分组的东西。

根据您使用的平台,有些功能可能是有用的“第一”功能。

0

您可以在查询结果做另一个查询的基础上,这样的:

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. 
2

有一对夫妇不同的方式来得到它。

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 

三。使用子查询

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

似乎无法得到正确的SQL格式,尝试lang-sql里面,但没有运气。 – Gabriel

+1

嗯。我认为你不能混合使用代码块和列表。 – MPelletier