我有一个示例数据库,其中包含3个不同的表customers
,orders
,orderdetails
。
任务是显示客户名称和客户表中的地址,然后按订单ID显示每个订单的总金额。订单详细信息有几次订单ID,是按单价x价格计算的,因此我必须在进行计算后将它们相加。
客户有一个字段customerid,我可以使用该字段与具有相同字段的订单进行合并,orders表具有orderid,可以将其用于合并到orderdetails和对订单总数求和,但是我不知道如何将信息在一起。 “客户”表没有用于计算总订单的字段,只有“客户ID”。因此,我尝试从3个表中捏合在一起,这些表中有一些相关的列,但每个表中都没有。
我可以执行2条单独的select语句,每条语句都符合我的期望,但是我一直试图将信息汇总在一起,但是无法做到。
SELECT c.CustomerID, c.[Address], o.orderid
FROM Customers c
Join Orders o
ON c.CustomerID = o.CustomerID
--how to join these together?
SELECT od.orderid, SUM(od.UnitPrice*od.Quantity) as 'Subtotal'
FROM OrderDetails od
Join Orders o
ON od.OrderID = o.OrderID
Group by od.OrderID
我正在尝试显示以下信息:
Customer Name, Address, OrderID, and Order Total.
答案 0 :(得分:1)
尝试-
SELECT c.CustomerID, c.[Address], od.orderid, SUM(od.UnitPrice* od.Quantity) as 'Subtotal'
FROM OrderDetails od
Join Orders o
ON od.OrderID = o.OrderID
join Customers c ON c.CustomerID = o.CustomerID
Group by c.CustomerID, c.[Address], od.OrderID
答案 1 :(得分:0)
您可以将三个表连接在一起,如下所示。我正在使用派生表OrderDetails来计算orderId级别的小计。
SELECT c.CustomerID, c.[Address], o.orderid, SUM(od.Subtotal) as 'Subtotal'
FROM Customers c
Join Orders o
ON c.CustomerID = o.CustomerID
join (SELECT orderid, SUM(od.UnitPrice*od.Quantity) as Subtotal from OrderDetails od GROUP BY OrderId) as OrderDetails od
ON od.OrderID = o.OrderID
group by c.CustomerID, c.[Address], o.orderid
答案 2 :(得分:0)
Mukesh的回答直接将我引向了最后,我能够通过以下内容将customerid排除在结果之外。这很有帮助,我感谢大家的投入。
SELECT c.CompanyName, c.[Address], od.orderid, SUM(od.UnitPrice* od.Quantity) as
'Subtotal'
FROM OrderDetails od
Join Orders o
ON od.OrderID = o.OrderID
join Customers c ON c.CustomerID = o.CustomerID
Group by c.CompanyName, c.[Address], od.OrderID