我如何加入这些以获取其产品名称的金额?
SELECT [tblOrderDetails].[ProductId], sum(Ammount)
FROM [web].[dbo].[tblOrderDetails]
where [tblProducts].Id = [tblOrderDetails].ProductId
group by [tblOrderDetails].[ProductId]
SELECT [tblProducts].ProductName from [web].[dbo].[tblProducts]
谢谢,
百里
答案 0 :(得分:2)
如果每个产品的tblOrderDetails中至少有一个条目,那么你可以使用INNER JOIN:
SELECT P.ProductName,
SUM(OD.Amount)
FROM tblProducts P
INNER JOIN tblOrderDetails OD ON (P.Id = OD.ProductId)
GROUP BY P.ProductName
您正在为Products表中的每个产品说明,在OrderDetails表中为我提供具有相同Product.Id的匹配行。然后,您可以按ProductName对其进行分组,然后按SUM计算每个产品的数量。
如果可能没有产品订单,请改用LEFT JOIN。这将返回两个表中匹配的所有行,以及任何存在但在OrderDetails中没有条目的产品。
Jeff Atwood对于编码恐怖片中JOINS所做的事情有一个很好的视觉解释:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html
答案 1 :(得分:1)
我更喜欢ANSI连接,但是如果你想使用Oracle类型连接(Oracle不推荐),只需添加
[web].[dbo].[tblProducts]
在FROM子句之后。
您的代码应该有点像:
SELECT [tblOrderDetails].[ProductId], sum([tblOrderDetails].[ProductId])
FROM [web].[dbo].[tblOrderDetails] , [web].[dbo].[tblProducts]
where [tblProducts].Id = [tblOrderDetails].ProductId
group by [tblOrderDetails].[ProductId]