2012-12-10 3 views
1

나는 두 개의 테이블 열 Order이 (CID), 고객 당 주문 수 및 모든 주문에 대한 각 고객 총액이 표시됩니다.SQL 쿼리 고객 및 총 금액에 따라 주문의 수를 카운트

지금까지 두 가지 별도의 쿼리가 있습니다. 하나는 저에게 고객 주문 수를 제공합니다 ....

SELECT CID, Count(Order.OrderID) AS TotalOrders 
FROM [Order] 
Where CID = CID 
GROUP BY CID 
Order BY Count(Order.OrderID) DESC; 

그리고 다른 하나는 총 판매를 제공합니다. 불행하게도 않는 액세스

SELECT CID, 
     Count(DISTINCT O.OrderID) AS TotalOrders, 
     Sum(OI.Quantity*OI.SalePrice) AS TotalDollarAmount 
FROM [Order] O 
INNER JOIN [OrderItem] OI 
    ON O.OrderID = OI.OrderID 
GROUP BY CID 
Order BY Count(DISTINCT O.OrderID) DESC 

: 나는 2010 년이

+2

어디서 CID = CID입니까? – Beth

답변

1

당신은 다른 SQL 엔진에 COUNT(DISTINCT ...)를 사용하는 것이 문제를 결합 ...

SELECT CID, Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmount 
FROM OrderItem, [Order] 
WHERE OrderItem.OrderID = [Order].OrderID 
GROUP BY CID 

내가 Access에서이 일을 해요가 있어요 지원하지 않습니다. 대신 먼저 주문 달러 금액을 얻을 수있는 다음 순서의 수를 계산하기 전에 가입 :

SELECT CID, 
     COUNT(Orders.OrderID) AS TotalOrders, 
     SUM(OrderAmounts.DollarAmount) AS TotalDollarAmount 
FROM [Orders] 
INNER JOIN (SELECT OrderID, Sum(Quantity*SalePrice) AS DollarAmount 
     FROM OrderItems GROUP BY OrderID) AS OrderAmounts 
    ON Orders.OrderID = OrderAmounts.OrderID 
GROUP BY CID 
ORDER BY Count(Orders.OrderID) DESC 

당신이 (이상한하지만 가능) 어떤 항목이 주문을 한 고객을 포함해야하는 경우, LEFT OUTER JOININNER JOIN을 변경합니다.

+0

알지 못했습니다 - 팁 주셔서 감사합니다! 결정된. – PinnyM

2

2 개의 기존 쿼리를 하위 쿼리로 사용하는 쿼리를 만들고 CID의 2 개의 하위 쿼리를 결합하십시오. 하위 쿼리 대신 상위 쿼리에 ORDER BY을 정의하십시오.

SELECT 
    sub1.CID, 
    sub1.TotalOrders, 
    sub2.TotalDollarAmount 
FROM 
    (
     SELECT 
      CID, 
      Count(Order.OrderID) AS TotalOrders 
     FROM [Order] 
     GROUP BY CID 
    ) AS sub1 
    INNER JOIN 
    (
     SELECT 
      CID, 
      Sum(OrderItem.Quantity*OrderItem.SalePrice) 
       AS TotalDollarAmount 
     FROM OrderItem INNER JOIN [Order] 
     ON OrderItem.OrderID = [Order].OrderID 
     GROUP BY CID 
    ) AS sub2 
    ON sub1.CID = sub2.CID 
ORDER BY sub1.TotalOrders DESC;