使用Select ... Group by连接表

时间:2011-12-04 18:05:53

标签: sql

我如何加入这些以获取其产品名称的金额?

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]

谢谢,

百里

2 个答案:

答案 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]