~~~!!!比较难的SQL!!!~~~

hxm20003 2006-03-23 02:11:35
create table #t0
(
EmployeeID int,
parent_employeeID int,
sales decimal(18,2)
)
insert into #t0 values (1,2,100)
insert into #t0 values (2,4,200)
insert into #t0 values (3,5,60)
insert into #t0 values (4,6,20)
insert into #t0 values (5,0,60)
insert into #t0 values (6,8,100)
insert into #t0 values (7,8,20)
insert into #t0 values (8,0,30)
insert into #t0 values (9,0,10)

EmployeeID parent_employeeID sales
1 2 100
2 4 200
3 5 60
4 6 20
5 0 60
6 8 100
7 8 20
8 0 30
9 0 10

结果如下:
EmployeeID N(层次) sales_amount
1 5 100
2 4 250 (100 * 0.5 + 200)
3 2 60
4 3 145 (100 * 0.5 + 200) * 0.5 + 20
5 1 60
6 2 172.50 ((100 * 0.5 + 200) * 0.5 + 20) * 0.5 + 100
7 2 20
8 1 126.25 (((100 * 0.5 + 200) * 0.5 + 20) * 0.5 + 100 + 20) * 0.5 + 30
9 2 10

规则如下:
如果EmployeeID有下级的,那么自己的销售额再加上下级的sales*0.5
哪位能给出最佳SQL?
...全文
143 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
子陌红尘 2006-03-23
  • 打赏
  • 举报
回复
先给出一个可行方案:
-----------------------------------------------------------------------------------------------------------------
declare @t0 table(EmployeeID int,Parent_employeeID int,sales decimal(18,2))
insert into @t0 values (1,2,100)
insert into @t0 values (2,4,200)
insert into @t0 values (3,5,60)
insert into @t0 values (4,6,20)
insert into @t0 values (5,0,60)
insert into @t0 values (6,8,100)
insert into @t0 values (7,8,20)
insert into @t0 values (8,0,30)
insert into @t0 values (9,0,10)

declare @t1 table(EmployeeID int,Parent_employeeID int,sales_amount decimal(18,2),level int)
declare @level int
set @level=1
insert into @t1 select *,@level from @t0 where parent_employeeID=0
while @@rowcount<>0
begin
set @level=@level+1
insert into @t1 select a.*,@level from @t0 a,@t1 b where a.parent_employeeID=b.EmployeeID and b.level=@level-1
end

while @level>0
begin
update a set sales_amount=a.sales_amount+isnull((select sum(sales_amount*0.5) from @t1 where parent_employeeID=a.EmployeeID),0)
from @t1 a where level=@level

set @level=@level-1
end

select EmployeeID,Level,sales_amount from @t1 order by EmployeeID

/*
EmployeeID Level sales_amount
----------- ----------- --------------------
1 5 100.00
2 4 250.00
3 2 60.00
4 3 145.00
5 1 90.00
6 2 172.50
7 2 20.00
8 1 126.25
9 1 10.00
*/

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧