2012-03-23 1 views
0

Ниже представлен мой относительно простой запрос о продаже, но я хочу, чтобы он забрал всех моих дилеров, а не только дилеров, имеющих продажи. Это возможно?SQL Query Добавление всех клиентов, даже если у них нет продаж

SELECT dbo.tblDealer.DealerID, Firstname, LastName, 
SUM(dbo.tblOrderDetail.PSVAmount) AS "PSV", 
SUM(dbo.tblOrderDetail.UplineVolume) AS "Upline", 
SUM(dbo.tblOrderDetail.LineTotal) AS "Product Total" 
FROM tblOrderDetail 
inner join tblOrder 
on dbo.tblOrderDetail.OrderID = dbo.tblOrder.OrderID 
inner join tblDealership on dbo.tblOrder.DealershipID = dbo.tblDealership.DealershipID 
inner join tblDealer on dbo.tblDealership.DealerID = dbo.tblDealer.DealerID 
where orderDate between '3/01/12' and '3/21/12 23:59:59' 
and dbo.tbldealer.active = -1 

GROUP BY dbo.tblDealer.DealerID, Firstname, LastName 
+3

попробовать левое внешнее соединение –

+1

знакомства Джефф Этвуд [Визуальное объяснение SQL JOIN и] (HTTP://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html) - очень полезно –

ответ

3

Вы должны изменить порядок ваших соединений, и сделать outer join вместо с inner join:

SELECT dbo.tblDealer.DealerID, Firstname, LastName, 
SUM(dbo.tblOrderDetail.PSVAmount) AS "PSV", 
SUM(dbo.tblOrderDetail.UplineVolume) AS "Upline", 
SUM(dbo.tblOrderDetail.LineTotal) AS "Product Total" 
FROM tblDealer 
inner join tblDealership 
on dbo.tblDealership.DealerID = dbo.tblDealer.DealerID 
left join tblOrder 
on dbo.tblOrderDetail.OrderID = dbo.tblOrder.OrderID AND orderDate between '3/01/12' and '3/21/12 23:59:59' 
left join tblOrder 
on dbo.tblOrderDetail.OrderID = dbo.tblOrder.OrderID 
where dbo.tbldealer.active = -1 
GROUP BY dbo.tblDealer.DealerID, Firstname, LastName 
Смежные вопросы