2009-05-08 2 views
2

주문은 여러 행으로 구성 될 수 있으므로 OrderId는 고유하지 않습니다. SQL을 올바르게 구문 분석하기 위해 SUM을 수행하고 GROUP BY를 사용하지 않아도되는 방법은 무엇입니까? 다른 열에서 sum을 사용할 때 고유 ID를 선택 하시겠습니까?

SELECT DISTINCT OrderId, SUM(ProductPrice * ProductQuantity) as Total 
FROM OrderDetails 
GROUP BY OrderId 

내가 선으로 그룹을 벗을 경우

는 그때 주문이 출력 모두 행을해야 다음 두 제품으로 구성하는 경우

'OrderDetails.OrderId' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. 

편집

내 원하는 결과가 얻을.

그룹 별 출력은 1 행입니다.

+0

왜 작동하는지 그룹화하지 않으시겠습니까? – Greg

답변

0

주문 표가 없습니까?

일반적으로 주문에는 주문 및 세부 사항 (주문 행)이 포함되므로 대신 마스터 테이블을 사용하여 조인해야합니다. 이것은 효과가있다.

SELECT O.OrderID, SUM(Od.ProductPrice * OD.ProductQuantity) as Total 
FROM Orders AS O INNER JOIN OrderDetails AS OD ON O.orderID = OD.OrderID 
group by O.OrderID 
2

별명이 필요하지 않습니다.
추가 열을 합산/계산할 때 그룹이 있어야합니다.
그룹별로 주문 당 합계가 표시됩니다. 가 아닌 집계 열을 선택하면

그래서
1-20.00
1-30.00
2-10.00


1-50.00
2-10.00

0

을 얻을 것이다 (이 경우 OrderID) 및 집계 된 열 (SUM(xxx))이 있으면 집계되지 않은 열을 기준으로 그룹화해야합니다.

그러나 groupBy를 사용하면 각 orderID에 대해 다른 모든 값을 함께 그룹화하므로 OrderID는 별개의 값을 갖게됩니다.

관련 문제