качестве домашки на первом уроке просят вывести:
-- Сколько в каждой категории продано (штук) товаров от поставщика №1 во Францию
я уже запрос крутил и так и сяк, по одной категории количество получаю, а вот подсчёт по всем остальным не получается вывести (где NULL, там 0 должен быть)
SELECT c.CategoryID, c.CategoryName, ISNULL SUM(od.Quantity)
FROM [Categories] c LEFT JOIN
[Products] p ON c.CategoryID = p.CategoryID
AND p.SupplierID = 1
LEFT JOIN
[Order Details] od ON p.ProductID = od.ProductID LEFT JOIN
[Orders] o ON o.OrderID = od.OrderID
--AND o.ShipCountry = 'France'
--WHERE p.SupplierID = 1 --AND o.ShipCountry = 'France'
--WHERE o.ShipCountry = 'France'
GROUP BY c.CategoryID, c.CategoryName
показывает лишь одну категорию, ну либо все категории, но без подсчётов
может кто подскажет, как тут правильно построить запрос?
вот что выдаётся
Если Вам не трудно, закинуть структуру таблицы и Ваш запрос сюда: https://sqlize.online
А можно ссылочку?
вот. закинул: https://sqlize.online/sql/mssql2017/96709dae0ae5e24d983c464455769b1d/ БД - классика Northwind, вот скрипт https://raw.githubusercontent.com/microsoft/sql-server-samples/master/samples/databases/northwind-pubs/instnwnd.sql ну и сам урок, мало ли кому-то инетересно будет: https://www.youtube.com/watch?v=s0eg-gq9h-4
Мне кажется Вам нужно сделать выборку from Orders, и присоединить другие таблицы
но в таблице Orders нет связей с категориями, по которым у поставщика есть продажи. мне же надо колво по категориям сделать
Группировка может быть и по присоединенной таблице.
select Ct.CategoryName , SUM( CASE WHEN OdDet.OrderID = Od.OrderId Then OdDet.Quantity ELSE 0 END ) from [dbo].[Order Details] as OdDet join [dbo].[Products] as Pd on OdDet.ProductID = Pd.ProductID join [dbo].[Categories] as Ct On Pd.CategoryID = Ct.CategoryID left join Orders as Od On OdDet.OrderID = Od.OrderID and Od.ShipCountry = 'France' and Pd.SupplierID = 1 group by Ct.CategoryName
Зачем так сложно? SUM( CASE WHEN OdDet.OrderID = Od.OrderId Then OdDet.Quantity ELSE 0 END ) проще SUM(ISNULL(OdDet.Quantity),0)
почему "left join Orders as Od" ? тут явно должен быть inner join SUM( CASE WHEN OdDet.OrderID = Od.OrderId Then OdDet.Quantity ELSE 0 END ) и это проще записать как SUM(ISNULL(OdDet.Quantity,0))
ну так запишите... с инер и вот этим.... исходно не я вроде спрашивал
вопросов больше нет
Ты поместил условия, что должны фильтровать, в фразу on из left join - так это условие ничего фильтровать не будет.
Через product будет
Обсуждают сегодня