Получите значения из таблицы A, даже если она не существует в таблице B, на основе критериев таблицы B

#sql #sql-server

Вопрос:

Это может показаться очень простым и глупым для чемпионов языка SQL. Мне нужна помощь.

У меня есть два стола

Таблица А — Продукт

Код продукта Имя продукта
APPLMAC Apple Mac
АППЛИФ Apple iPhone
APPLWTC Apple Watch

Таблица В — Продажи

ОрдерИД Код продукта Продажи Дата заказа
1 APPLMAC $1300 2021-08-11
2 APPLMAC $1300 2021-08-12
3 APPLMAC $1300 2021-08-12
4 APPLMAC $1300 2021-08-13
5 АППЛИФ $999 2021-08-11

Я хочу написать запрос, который дал бы мне следующий результат, и ранжировал бы их от самого высокого до самого низкого и показал бы 0, если бы продаж не было.

Имя продукта Итоговые продажи
Apple Mac $5200
Apple iPhone $999
Apple Watch $0

Мой текущий запрос дает мне только

Имя продукта Итоговые продажи
Apple Mac $5200
Apple iPhone $999

Запрос, который я написал, выглядит следующим образом

 SELECT SR.Description,COALESCE(sum(OH.TotalSellPrice), 0)
FROM Enterprise32.dbo.Product as SR
RIGHT JOIN Enterprise32.dbo.Salesas OH on OH.SalesRepCode = SR.Code
where OrderDate BETWEEN DATEADD(week, DATEDIFF(day, 0, getdate()-1)/7, 0)  AND DATEADD(week, DATEDIFF(day, 0, getdate()-1)/7, 5) 
GROUP BY SR.Description
 

Ответ №1:

Пользователь a LEFT JOIN начинает со таблицы, в которой вы хотите все сохранить.

Переместите условия для всех таблиц, кроме первой, в ON предложение:

 SELECT SR.Description, COALESCE(sum(OH.TotalSellPrice), 0)
FROM Enterprise32.dbo.Product SR LEFT JOIN
     Enterprise32.dbo.Salesas OH 
     ON OH.SalesRepCode = SR.Code AND
        OrderDate BETWEEN DATEADD(week, DATEDIFF(day, 0, getdate()-1)/7, 0) AND
                           DATEADD(week, DATEDIFF(day, 0, getdate()-1)/7, 5) 
GROUP BY SR.Description