存储过程从3个表中选择

时间:2016-06-05 11:16:24

标签: sql sql-server join stored-procedures

我的数据库SalesSalesPeopleAppliances中有三个表。

销售

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

如何获得此结果? (这显示了从最有利可图到最低订购的每个销售人员的盈利能力。总收入只是销售商品数量乘以价格的总和。佣金是根据毛额减去这些商品的成本(即来自 数量*(价格 - 成本))。净利润是总利润减去佣金。)

Name          Gross Commission Net Profit
------------- ----- ---------- ---------
Charles Brown 2380  83.5       751.5
Linda Smith   1505  83.25      471.75
Harry Purple  990   65.7       299.3
Anne Green    950   40.2       294.8

我的尝试:

CREATE PROC Profitability AS
    SELECT 
        sp.EmployeeName, (sum(s.Qty) * a.Price) as [Gross], 
        [Gross] - a.Cost, as [Commision],
        SOMETHING as [Net Profit]
    FROM 
        Salespeople sp, Appliances a, Sales s
    WHERE 
        s.AppID = a.ID 
        AND sp.EmployeeID = s.EmployeeID
    GROUP BY
        sp.EmployeeName
GO

EXEC Profitability

1 个答案:

答案 0 :(得分:0)

简单规则:从不FROM子句中使用逗号。 始终使用明确的JOIN语法。

除了修复JOIN语法之外,您的查询还需要对聚合函数进行一些其他增强:

SELECT sp.EmployeeName, sum(s.Qty * a.Price) as Gross, 
       SUM(s.Qty * (a.Price - a.Cost)) * sp.CommRate / 100.0 as Commission,
       SUM(s.Qty * (a.Price - a.Cost)) * (1 - sp.CommRate / 100.0) as NetProfit
FROM Sales s JOIN
     Salespeople sp
     ON sp.EmployeeID = s.EmployeeID JOIN
     Appliances a
     ON s.AppID = a.ID 
GROUP BY sp.EmployeeName sp.CommRate
ORDER BY NetProfit DESC;