WITH ОтгруженныеТовары AS (
SELECT
tn.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
SUM(dtn.Количество) AS КоличествоОтгружено
FROM
ТоварнаяНакладная tn
JOIN
ДеталиТоварнойНакладной dtn ON tn.НомерНакладной = dtn.ТоварнаяНакладнаяID
JOIN
Товары t ON dtn.ТоварID =
t.ID WHERE
MONTH(tn.Дата) = 9
AND YEAR(tn.Дата) = 2024
GROUP BY
tn.ТорговаяТочкаID, t.Наименование, t.ГарантийныйСрок
),
ПроданныеТовары AS (
SELECT
s.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
SUM(s.Количество) AS КоличествоПродано,
SUM(s.Сумма) AS СуммаПродажи,
SUM(s.Сумма - (s.Количество * t.ВходнаяЦена)) AS Прибыль
FROM
Сделки s
JOIN
Товары t ON s.ТоварID =
t.ID WHERE
MONTH(s.Дата) = 9
AND YEAR(s.Дата) = 2024
GROUP BY
s.ТорговаяТочкаID, t.Наименование, t.ГарантийныйСрок
)
SELECT
COALESCE(o.ТорговаяТочкаID, pt.ТорговаяТочкаID) AS ТорговаяТочкаID,
tt.Название AS НазваниеТорговойТочки,
COALESCE(o.Наименование, pt.Наименование) AS НаименованиеТовара,
COALESCE(o.ГарантийныйСрок, pt.ГарантийныйСрок) AS ГарантийныйСрок,
COALESCE(o.КоличествоОтгружено, 0) AS КоличествоОтгружено,
COALESCE(pt.КоличествоПродано, 0) AS КоличествоПродано,
COALESCE(pt.СуммаПродажи, 0) AS СуммаПродажи,
COALESCE(pt.Прибыль, 0) AS Прибыль
FROM
ОтгруженныеТовары o
FULL OUTER JOIN
ПроданныеТовары pt ON o.ТорговаяТочкаID = pt.ТорговаяТочкаID AND o.Наименование = pt.Наименование
LEFT JOIN
ТорговыеТочки tt ON COALESCE(o.ТорговаяТочкаID, pt.ТорговаяТочкаID) =
tt.ID UNION ALL
SELECT
NULL AS ТорговаяТочкаID,
NULL AS НазваниеТорговойТочки,
NULL AS НаименованиеТовара,
NULL AS ГарантийныйСрок,
NULL AS КоличествоОтгружено,
NULL AS КоличествоПродано,
NULL AS СуммаПродажи,
SUM(pt.Прибыль) AS ОбщаяПрибыль
FROM
ПроданныеТовары pt;
WITH ОтгруженныеТовары AS (
SELECT
tn.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
SUM(dtn.Количество) AS КоличествоОтгружено
FROM
ТоварнаяНакладная tn
JOIN
ДеталиТоварнойНакладной dtn ON tn.НомерНакладной = dtn.ТоварнаяНакладнаяID
JOIN
Товары t ON dtn.ТоварID = t.ID
WHERE
MONTH(tn.Дата) = 9
AND YEAR(tn.Дата) = 2024
GROUP BY
tn.ТорговаяТочкаID, t.Наименование, t.ГарантийныйСрок
),
ПроданныеТовары AS (
SELECT
s.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
SUM(s.Количество) AS КоличествоПродано,
SUM(s.Сумма) AS СуммаПродажи,
SUM(s.Сумма - (s.Количество * t.ВходнаяЦена)) AS Прибыль
FROM
Сделки s
JOIN
Товары t ON s.ТоварID = t.ID
WHERE
MONTH(s.Дата) = 9
AND YEAR(s.Дата) = 2024
GROUP BY
s.ТорговаяТочкаID, t.Наименование, t.ГарантийныйСрок
)
SELECT
COALESCE(o.ТорговаяТочкаID, pt.ТорговаяТочкаID) AS ТорговаяТочкаID,
tt.Название AS НазваниеТорговойТочки,
COALESCE(o.Наименование, pt.Наименование) AS НаименованиеТовара,
COALESCE(o.ГарантийныйСрок, pt.ГарантийныйСрок) AS ГарантийныйСрок,
COALESCE(o.КоличествоОтгружено, 0) AS КоличествоОтгружено,
COALESCE(pt.КоличествоПродано, 0) AS КоличествоПродано,
COALESCE(pt.СуммаПродажи, 0) AS СуммаПродажи,
COALESCE(pt.Прибыль, 0) AS Прибыль
FROM
ОтгруженныеТовары o
FULL OUTER JOIN
ПроданныеТовары pt ON o.ТорговаяТочкаID = pt.ТорговаяТочкаID AND o.Наименование = pt.Наименование
LEFT JOIN
ТорговыеТочки tt ON COALESCE(o.ТорговаяТочкаID, pt.ТорговаяТочкаID) = tt.ID
UNION ALL
SELECT
NULL AS ТорговаяТочкаID,
NULL AS НазваниеТорговойТочки,
NULL AS НаименованиеТовара,
NULL AS ГарантийныйСрок,
NULL AS КоличествоОтгружено,
NULL AS КоличествоПродано,
NULL AS СуммаПродажи,
SUM(pt.Прибыль) AS Прибыль
FROM
ПроданныеТовары pt;
почему то результат получается такой
1 БелКомп Клавиатура HyperX Alloy Origins 1 10 8 3917.28 1485.28 31553.68
1 БелКомп Монитор Samsung 24" 1 2 2 14496.30 13296.30 31553.68
1 БелКомп Мышь Logitech G502 1 10 1 240.00 40.00 31553.68
2 ПкСтор Клавиатура HyperX Alloy Origins 1 2 0 0.00 0.00 31553.68
2 ПкСтор Моноблок Raskat Studio 1 20 10 27013.70 9403.70 31553.68
2 ПкСтор Ноутбук HP Pavilion 2 5 5 19328.40 7328.40 31553.68
где 31553.68 там пишет общая прибль во всех столбцах а мне надо в одном