2016-05-12 6 views
1

У меня есть три таблицы в моей базе данных продаж, Коммивояжёров и техника:Трехходовых присоединиться к SQL Server

продажи

SaleDate EmployeeID AppID Qty 
---------- ---------- ----- ----------- 
2010-01-01 1412  150 1 
2010-01-05 3231  110 1 
2010-01-03 2920  110 2 
2010-01-13 1412  100 1 
2010-01-25 1235  150 2 
2010-01-22 1235  100 2 
2010-01-12 2920  150 3 
2010-01-14 3231  100 1 
2010-01-15 1235  300 1 
2010-01-03 2920  200 2 
2010-01-31 2920  310 1 
2010-01-05 1412  420 1 
2010-01-15 3231  400 2 

Коммивояжёры

EmployeeID EmployeeName     CommRate BaseSalary SupervisorID 
---------- ------------------------------ ----------- ----------- ------------ 
1235  Linda Smith     15   1200  1412 
1412  Anne Green      12   1800  NULL 
2920  Charles Brown     10   1150  1412 
3231  Harry Purple     18   1700  1412 

техника

ID AppType    StoreID Cost   Price 
---- -------------------- ------- ------------- ------------- 
100 Refrigerator   22  150   250 
110 Refrigerator   20  175   300 
150 Television   27  225   340 
200 Microwave Oven  22  120   180 
300 Washer    27  200   325 
310 Washer    22  280   400 
400 Dryer    20  150   220 
420 Dryer    22  240   360 

Как я могу производить занимает список продавцов вместе с их средней комиссии по продажам, за исключением продаж холодильников.

Запрос должен показывать:

EmployeeName     Average Commission 
------------------------------ ------------------ 
Harry Purple     79.1999969482422 
Linda Smith     75.375 
Charles Brown     59.3333333333333 
Anne Green      42 
+0

Как вы рассчитываете на комиссию? –

+2

@ Комиссия Феликса, как правило, составляет процент от каждой продажи. Я думаю, что мы можем принять здесь стандартное определение. –

+0

Что вы подразумеваете под рейтингом? – Alex

ответ

1

Если вы хотите включить все сотрудники - даже без продаж холодильников - использовать LEFT JOIN и поставить фильтр для холодильников в пункте ON :

SELECT sp.EmployeeName, 
     COALESCE(AVG(s.Qty * (sp.CommRate/100.0) * a.Price), 0) as AvgCommRate 
FROM SalesPeople sp LEFT JOIN 
    Sales s 
    ON s.EmployeeID = sp.EmployeeID LEFT JOIN 
    Appliances a 
    ON s.AppID = a.ID AND a.AppType <> 'Refrigerator' 
GROUP BY sp.EmployeeName 
ORDER BY AvgCommRate DESC; 
2
SELECT sp.EmployeeName, 
    COALESCE(AVG(s.Qty * (sp.CommRate/100.0) * a.Price), 0) AS rank 
FROM Sales s 
LEFT JOIN SalesPeople sp 
    ON s.EmployeeID = sp.EmployeeID 
INNER JOIN Appliances a 
    ON s.AppID = a.ID 
WHERE a.AppType <> 'Refrigerator' 
GROUP BY sp.EmployeeName 
ORDER BY rank DESC 
+1

@TimBiegeleisen Ваш ответ правильный, вы можете умножить на (a.Price) только извините за дезинформацию ранее. Нет необходимости минус (a.Cost) –

Смежные вопросы