[英]Sum between 3 linked tables SQL Server
我正在尝试从链接表中提取一笔款项。
订购 :
OrderID LocationID OrderDate
100 1 1/1/2000
200 2 1/2/2000
OrderedItems :
ID OrderID ItemID
1 100 1
2 200 2
3 200 2
4 100 3
OrderItem :
ItemID ItemName Cost
1 Mobile1 100.00
2 Mobile2 200.00
3 Mobile3 300.00
Order
表实际上是一组OrderedItems
。 OrderedItems
每一行都通过ItemID
链接回到OrderItem
。
我正在尝试在下面的查询中添加一列订单总数。
Order Number Location Date Ordered Order Total
-------------------------------------------------------
100 Sydney 1/1/2000 400
200 Brisbane 1/2/2000 400
我当前查询是:
SELECT
Order.OrderID AS [Order Number],
OL.Name AS [Location],
Order.OrderDate AS [Date Ordered]
FROM
Order
LEFT JOIN
Office_Locations AS OL ON OL.id = Order.LocationID
我尝试遵循此链接,但是我需要通过3个表进行链接以添加值。
任何麻将都很棒!
您没有从三个表中找到总和。 您可以从一个表中找到一个总和:OrderItem表。 唯一的技巧是正确完成JOIN
和GROUP BY
表达式以使该列可用。
SELECT o.OrderID As [Order Number], l.Name As Location
, o.OrderDate As [Date Ordered], SUM(i.Cost) As [Order Total]
FROM [Order] o
INNER JOIN Office_Locations l on l.id = o.LocationID
INNER JOIN OrderedItems oi on oi.OrderID = o.OrderID
INNER JOIN OrderItem i ON i.ItemID = oi.ItemID
GROUP BY o.OrderID, l.Name, o.OrderDate
您需要使用SUM
来获得总Cost
:
SELECT
[Order Number] = o.OrderID,
Location = ol.Name,
[Date Ordered] = o.OrderDate,
[Order Total] = SUM(i.Cost)
FROM [Order] o
INNER JOIN OrderedItems oi
ON oi.OrderId = o.OrderId
INNER JOIN OrderItem i
ON i.ItemID = oi.ItemID
LEFT JOIN Office_Locations ol
ON ol.id = o.LocationID
GROUP BY
o.OrderID, o.OrderDate, ol.Name
正如Joel Coehoorn所评论的那样,在OrderedItems
表中具有quantity
字段比重复它们更为正常。 按照他的建议,您的OrderedItems
表应为:
ID OrderID ItemID Quantity
1 100 1 1
2 200 2 2
3 100 3 1
补充笔记:
Order
可以重命名为OrderHeader
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.