2011-12-04 226 views
0

加入表如何加入這些以獲得與其產品名稱的金額?通過選擇...集團與

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] 

感謝,

巴里

+1

您可以爲這兩個表(tblOrderDetails和tblProducts)的模式? – Todd

回答

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 

什麼您正在爲產品表中的每個產品說,給我具有相同Product.Id的OrderDetails表中的匹配行。然後按產品名稱對這些進行分組,然後累計數量以查看每個產品的數量。

如果有沒有訂單的產品的可能性,使用LEFT JOIN代替。這將返回兩個表中匹配的所有行,以及任何存在但在OrderDetails中沒有條目的產品。

傑夫阿特伍德有什麼加入以編碼恐怖做了極大的視覺解釋:http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

1

我寧願ANSI連接,但如果你想使用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]