我有两个
Order带有列的表:
OrderID,OrderDate,CID,EmployeeID
Run Code Online (Sandbox Code Playgroud)
并OrderItem带有列:
OrderID,ItemID,Quantity,SalePrice
Run Code Online (Sandbox Code Playgroud)
我需要返回客户 ID(CID)、每个客户的订单数以及每个客户所有订单的总金额。
到目前为止,我有两个单独的查询。其中一个给我客户订单的数量......
SELECT CID, Count(Order.OrderID) AS TotalOrders
FROM [Order]
Where CID = CID
GROUP BY CID
Order BY Count(Order.OrderID) DESC;
Run Code Online (Sandbox Code Playgroud)
另一个给我总销售额。我在组合它们时遇到了麻烦......
SELECT CID, Sum(OrderItem.Quantity*OrderItem.SalePrice) AS TotalDollarAmount
FROM OrderItem, [Order]
WHERE OrderItem.OrderID = [Order].OrderID
GROUP BY CID
Run Code Online (Sandbox Code Playgroud)
我在 Access 2010 中执行此操作。
COUNT(DISTINCT ...)您可以在其他 SQL 引擎中使用:
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
Run Code Online (Sandbox Code Playgroud)
遗憾的是 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
Run Code Online (Sandbox Code Playgroud)
如果您需要包括订单不含商品的客户(不常见但可能),请更改INNER JOIN为LEFT OUTER JOIN。
| 归档时间: |
|
| 查看次数: |
125830 次 |
| 最近记录: |