У меня есть три таблицы в моей ERP, и мне нужен запрос SQL Server для объединения всех строк. Вот три таблицы, которые у меня есть со своими свойствами, фильтрация по коду продукта (SL.CodProduct = 'AL4301') для упрощения:
СТОЛОВЫЕ ПРОДУКТЫ:
- ТрескаПродукт
- ОписаниеПродукт
- Семья
СТОЛОВЫЕ ЗАПАСЫ:
- ТрескаПродукт
- Цвет
- Число
- ЕдиницыЗапас
ТАБЛИЦА ПРОДАЕТ:
- ТрескаПродукт
- ДатаПродано
- Цвет
- Число
- Проданных единиц
Мне нужно получить список всех комбинаций элементов (цвет - номер), показывающий продажи в месяц и общий запас в настоящее время. Проблема в том, что для некоторых комбинаций товаров не было продаж.
Я пробовал это с этим запросом:
SELECT DatePart(mm, SELLS.DateSold) As Month,
SELLS.CodProduct, PRODUCTS.DescProduct,
SELLS.Color, SELLS.Number,
SUM(SELLS.UnitsSold,
(SELECT STOCKS.UnitsStock
FROM STOCKS WITH(NOLOCK)
WHERE STOCKS.CodProduct = SELLS.CodProduct
AND STOCKS.Color = SELLS.Color AND STOCKS.Number = SELLS.Number) As Stock
FROM SELLS WITH(NOLOCK)
JOIN PRODUCTS WITH (NOLOCK) ON PRODUCTS.CodProduct = SELLS.CodProduct
WHERE PRODUCTS.Family = 05 AND SELLS.CodProducto = 'AL4301'
GROUP BY DatePart(mm, SELLS.DateSold), SELLS.CodProduct, SELLS.DescProduct, SELLS.Color, SELLS.Number
ORDER BY SELLS.CodProduct, SELLS.Color, SELLS.Number
С помощью этого запроса я получаю следующее:
Но мне нужно было бы получить это:
Благодаря @Gordon Linoff я получил решение. Наконец, я использовал это:
SELECT ST.CODPRODUCT, ST.DESPRODUCT, ST.COLOR, ST.NUMBER,
P.FAMILY, ST.UNITSSTOCK STOCK, SLL.MONTH, SLL.UNITSSOLD
FROM STOCKS ST
JOIN PRODUCTS P ON P.CODPRODUCT = ST.CODPRODUCT
LEFT OUTER JOIN
(SELECT SL.CODPRODUCT, SL.COLOR, SL.NUMBER,
DatePart(mm, SL.DATESOLD) MONTH,
SUM(SL.UNITSSOLD) UNITSSOLD
FROM SELLS SL
GROUP BY SL.CODPRODUCT, DatePart(mm, SL.DATESOLD),
SL.COLOR, SL.NUMBER) SLL
ON SLL.CODPRODUCT = ST.CODPRODUCT
AND SLL.COLOR = ST.COLOR
AND SLL.NUMBER = ST.NUMBER
ORDER BY ST.CODPRODUCT, ST.COLOR, ST.NUMBER
NOLOCK
. Нет причин использоватьNOLOCK
, если только вы действительно не знаете, что делаете. Но он предлагает SQL Server. - person Gordon Linoff   schedule 26.09.2020