2011-12-04 6 views
0

商品名の金額を得るためにこれらをどのように結合しますか?選択してテーブルを結合する...グループby

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

あなたはこの2つのテーブル(tblOrderDetailsとtblProducts)のスキーマを提供することはできますか? – Todd

答えて

2

常にINNER JOINが、あなたが使用することができ、各製品のtblOrderDetailsで少なくとも1つのエントリがあるように起こっている場合:

SELECT P.ProductName, 
     SUM(OD.Amount) 

FROM tblProducts P 
INNER JOIN tblOrderDetails OD ON (P.Id = OD.ProductId) 

GROUP BY P.ProductName 

何Productsテーブルの各Productについて、同じProduct.Idを持つOrderDetailsテーブル内の一致する行を私に教えてください。次に、これらをProductNameでグループ化し、SUMを使用して製品ごとの数を表示します。

製品の注文がない可能性がある場合は、代わりにLEFT JOINを使用してください。一致する両方の表のすべての行と、存在するがOrderDetailsに項目を持たないすべての行が戻されます。

ジェフアトウッドは、コーディングホラーでオーバーやるJOINS何の偉大な視覚的な説明があります。http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html

1

(Oracleはお勧めしません)私は、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] 
関連する問題