2011-12-04 17 views
1

私はSQL Serverを使用しています。このステートメントは、メニューごとに自分の製品をリストしています。ネストされた選択で合計を使用する

SELECT menuname, productname 
FROM [web].[dbo].[tblMenus] 
FULL OUTER JOIN [web].[dbo].[tblProductsRelMenus] 
    ON [tblMenus].Id = [tblProductsRelMenus].MenuId 
FULL OUTER JOIN [web].[dbo].[tblProducts] 
    ON [tblProductsRelMenus].ProductId = [tblProducts].ProductId 
LEFT JOIN [web].[dbo].[tblOrderDetails] 
    ON ([tblProducts].Id = [tblOrderDetails].ProductId) 
GROUP BY [tblProducts].ProductName 

一部の製品にはメニューがなく、その逆もあります。私は以下を使用して、各製品の販売されているものを確立します。

SELECT [tblProducts].ProductName, SUM([tblOrderDetails].Ammount) as amount 
FROM [web].[dbo].[tblProducts] 
LEFT JOIN [web].[dbo].[tblOrderDetails] 
    ON ([tblProducts].ProductId = [tblOrderDetails].ProductId) 
GROUP BY [tblProducts].ProductName 

私がしたいのは、トップテーブルに量の列を補完することです。つまり、上記の最初の表と同じ行数を持つ表が必要ですが、存在する場合は金額の値を、それ以外の場合はnullが必要です。

私はこれを行う方法を理解できません。助言がありますか?

+0

あなたは合計*と* tblOrderDetails' 'から細部の両方をしたいですか? –

+0

どのバージョンのSQL Serverを使用していますか? –

+0

私は合計を必要とします、私はtblOrderDetailsから何も必要ありません。私はSQL Server 9.0を使用しています。 – Baz

答えて

1

私は何が不足しておりません場合は、2番目のクエリは、このような最初のクエリに組み込まれ、簡素化することができます。

SELECT 
    m.menuname, 
    p.productname, 
    t.amount 
FROM [web].[dbo].[tblMenus] m 
    FULL JOIN [web].[dbo].[tblProductsRelMenus] pm ON m.Id = pm.MenuId 
    FULL JOIN [web].[dbo].[tblProducts] p ON pm.ProductId = p.ProductId 
    LEFT JOIN (
    SELECT ProductId, SUM(Amount) as amount 
    FROM [web].[dbo].[tblOrderDetails] 
    GROUP BY ProductId 
) t ON p.ProducId = t.ProductId 
関連する問題