Top.Mail.Ru
Ответы
Аватар пользователя
9мес
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

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

Товары поступают через таблицы "ТоварнаяНакладная" и "ДеталиТоварнойНакладной".

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

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

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

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

Товары

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


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

объясните и помогите почему не правильно выдает результат

Дополнен

вот сам запрос
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.Наименование;

По дате
По рейтингу
Аватар пользователя
Просветленный
9мес
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
 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.Наименование;