Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите срочно с запросом sql

ITBR Ученик (15), на голосовании 2 недели назад
Товары поступают через таблицы "ТоварнаяНакладная" и "ДеталиТоварнойНакладной".

Продажи фиксируются в таблице "Сделки", где записывается количество проданных товаров и сумма.

Прибыль можно считать через запросы, опираясь на проданные товары и их закупочные цены из таблицы "Товары

вот мои таблицы ДеталиТоварнойНакладной ТоварнаяНакладная

Товары

таблица сделки


результат запроса

объясните и помогите почему не правильно выдает результат
Дополнен 1 месяц назад
вот сам запрос
WITH ОтгруженныеТовары AS (

SELECT

tn.ТорговаяТочкаID,

t.Наименование,

t.ГарантийныйСрок,

dtn.Количество,

tn.Дата

FROM

ТоварнаяНакладная tn

JOIN

ДеталиТоварнойНакладной dtn ON tn.НомерНакладной = dtn.ТоварнаяНакладнаяID

JOIN

Товары t ON dtn.ТоварID = t.ID

WHERE

MONTH(tn.Дата) = 9

AND YEAR(tn.Дата) = 2024

),

ПроданныеТовары AS (

SELECT

s.ТорговаяТочкаID,

t.Наименование,

t.ГарантийныйСрок,

s.Количество,

s.Сумма,

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.ГарантийныйСрок, s.Количество, s.Сумма

)

SELECT

o.ТорговаяТочкаID,

tt.Название AS НазваниеТорговойТочки,

o.Наименование AS ОтгруженныеТовары,

o.ГарантийныйСрок AS СортТовара,

o.Количество AS КоличествоОтгружено,

pt.Количество AS КоличествоПродано,

pt.Сумма AS СуммаПродажи,

CASE

WHEN pt.Прибыль IS NOT NULL THEN pt.Прибыль

ELSE 0

END AS Прибыль -- Используем прибыл, рассчитанную для проданных товаров

FROM

ОтгруженныеТовары o

LEFT JOIN

ПроданныеТовары pt ON o.ТорговаяТочкаID = pt.ТорговаяТочкаID AND o.Наименование = pt.Наименование

JOIN

ТорговыеТочки tt ON o.ТорговаяТочкаID = tt.ID

ORDER BY

o.ТорговаяТочкаID, o.Наименование;
Голосование за лучший ответ
GGG Просветленный (34794) 1 месяц назад
 WITH ОтгруженныеТовары AS ( 
SELECT
tn.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
dtn.Количество,
tn.Дата
FROM
ТоварнаяНакладная tn
JOIN
ДеталиТоварнойНакладной dtn ON tn.НомерНакладной = dtn.ТоварнаяНакладнаяID
JOIN
Товары t ON dtn.ТоварID = t.ID
WHERE
MONTH(tn.Дата) = 9
AND YEAR(tn.Дата) = 2024
),
ПроданныеТовары AS (
SELECT
s.ТорговаяТочкаID,
t.Наименование,
t.ГарантийныйСрок,
s.Количество,
s.Сумма,
(s.Сумма - (s.Количество * t.ВходнаяЦена)) AS Прибыль
FROM
Сделки s
JOIN
Товары t ON s.ТоварID = t.ID
WHERE
MONTH(s.Дата) = 9
AND YEAR(s.Дата) = 2024
)
SELECT
o.ТорговаяТочкаID,
tt.Название AS НазваниеТорговойТочки,
o.Наименование AS ОтгруженныеТовары,
o.ГарантийныйСрок AS СортТовара,
o.Количество AS КоличествоОтгружено,
pt.Количество AS КоличествоПродано,
pt.Сумма AS СуммаПродажи,
COALESCE(pt.Прибыль, 0) AS Прибыль -- Используем COALESCE для замены NULL на 0
FROM
ОтгруженныеТовары o
LEFT JOIN
ПроданныеТовары pt ON o.ТорговаяТочкаID = pt.ТорговаяТочкаID AND o.Наименование = pt.Наименование
JOIN
ТорговыеТочки tt ON o.ТорговаяТочкаID = tt.ID
ORDER BY
o.ТорговаяТочкаID, o.Наименование;
Похожие вопросы