Использование суммы с вложенным выбором - PullRequest
1 голос
/ 05 декабря 2011

Я использую 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

Я хочу дополнить верхнюю таблицу столбцом суммы. То есть мне нужна таблица с тем же количеством строк, что и в первой таблице выше, но со значением количества, если оно существует, в противном случае - ноль.

Я не могу понять, как это сделать. Есть предложения?

1 Ответ

1 голос
/ 05 декабря 2011

Если я ничего не пропустил, второй запрос можно упростить, а затем включить в первый запрос следующим образом:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...