#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