2011-12-13 6 views
3

다른 선택을하는 동안 select SUM을 수행하려고합니다. 내 현재 스크립트 : 나는 그렇게 속성의 나머지 부분에서 합계 기능을 분리 할 수있는 방법SQL select sum with sum

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의 SUM과 하나의 열이 포함되어 있습니까?

답변

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 

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

SQL 포맷팅을 제대로 수행하지 못했지만, 내부에서 lang-sql을 시도했지만 행운은 없었습니다. – Gabriel

+1

흠. 나는 당신이 코드 블록과리스트를 혼합 할 수 없다고 생각한다. – MPelletier