【问题标题】:Stored Procedure Select from 3 tables存储过程从 3 个表中选择
【发布时间】:2016-10-05 02:29:59
【问题描述】:

我的数据库中有三个表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

【问题讨论】:

标签: sql sql-server join stored-procedures


【解决方案1】:

简单规则:从不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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2022-01-08
    • 2011-06-10
    • 2010-12-02
    • 1970-01-01
    相关资源
    最近更新 更多