簡體   English   中英

存儲過程從3個表中選擇

[英]Stored Procedure Select from 3 tables

我的數據庫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

簡單規則: 請勿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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM