使用共享计划计算销售佣金

ddr*_*jca 5 t-sql sql-server

我正在尝试根据共享计划输出销售佣金.我有两个问题:

  1. 如何在不使用内联子查询的情况下编写查询
  2. 如果他们没有分享100%的销售人员及其剩余佣金,如何输出.

这是我到目前为止:

DECLARE @SALES TABLE
               (
                   Id INT,
                   SalesPerson VARCHAR(10),
                   Commission MONEY
               )

INSERT INTO @SALES VALUES(1,'Amy',    100.00)
INSERT INTO @SALES VALUES(2,'Lisa',   200.00)
INSERT INTO @SALES VALUES(3,'Joe',    300.00)
INSERT INTO @SALES VALUES(4,'Wendy',  400.00)
INSERT INTO @SALES VALUES(5,'Mike',   500.00)


DECLARE @SHARE_SCHEDULE TABLE
                        (
                            GIVER INT,
                            TAKER INT,
                            PERCENTAGE DECIMAL(9,2)
                        )

INSERT INTO @SHARE_SCHEDULE VALUES(3, 1, .5)
INSERT INTO @SHARE_SCHEDULE VALUES(3, 2, .5)
INSERT INTO @SHARE_SCHEDULE VALUES(4, 5, .4)

SELECT 
    S.SalesPerson,
    S.Commission + (SELECT SUM(Commission) 
                    FROM @SALES 
                    WHERE ID = SS.GIVER) * SS.PERCENTAGE Commission
 FROM @SALES S
 JOIN @SHARE_SCHEDULE SS ON SS.TAKER = S.ID
Run Code Online (Sandbox Code Playgroud)

预期成绩:

SalesPerson Commission
Amy         250.00
Lisa        350.00
Wendy       240.00
Mike        660.00
Run Code Online (Sandbox Code Playgroud)

Rod*_*man 1

with Q as
(
    select S.*, coalesce(J.share, 0) received, coalesce(K.share, 0) given from SALES S

    outer apply
    (
        select sum(H.PERCENTAGE * L.Commission) as share from SHARE_SCHEDULE H 
            inner join SALES L on L.Id = H.GIVER
            where H.TAKER = S.Id

    ) J

    outer apply
    (
        select sum(H.PERCENTAGE * L.Commission) as share from SHARE_SCHEDULE H 
            inner join SALES L on L.Id = H.GIVER
            where H.GIVER = S.Id
    ) K
)

select SalesPerson, (Commission + received - given) TotalCommission from Q 
    where (Commission + received - given) > 0
Run Code Online (Sandbox Code Playgroud)

J是销售人员收到的所有共享佣金的总和

K是销售人员给予的所有共享佣金的总和

中间结果 ( select * from Q) 如下所示:

Id  SalesPerson Commission received     given
--- ----------- ---------- ------------ -----------
1   Amy         100.00     150.000000   0.000000
2   Lisa        200.00     150.000000   0.000000
3   Joe         300.00     0.000000     300.000000
4   Wendy       400.00     0.000000     160.000000
5   Mike        500.00     160.000000   0.000000
Run Code Online (Sandbox Code Playgroud)

最终结果如下:

SalesPerson     TotalCommission (= commission + received - given)
-----------     ---------------
Amy             250.000000
Lisa            350.000000
Wendy           240.000000
Mike            660.000000
Run Code Online (Sandbox Code Playgroud)

Rextester 演示