SQL 由人员汇总到部门树递归合计总数函数

1、由人员计算出总数,在部门树(tree)按结构汇总(主父绑定)

CREATE function [dbo].[GetEmpDepNum]
(
    @ID int
)
RETURNS @Tree Table (ID [int] IDENTITY (1, 1),PID  Int,FID Int,SN Varchar(150), Name Varchar(150), Num Varchar(150))
as
begin 
declare @MaxNum int,@i int,@f int,@sNnm int
Insert @Tree SELECT c1.pid,c1.fid,c1.sn,c1.Name,(SELECT COUNT(*) FROM dbo.tbEmployee c2 WHERE c2.MID = c1.pid) 
    AS sNum FROM tbDepList c1 order by FID desc,pid 
--   select * from @TreeBcb
SELECT  @MaxNum=Count(*) from @Tree
set @i=1
  while (@i<=@MaxNum)
    begin
        select @f=fid from @Tree where ID=@i
        select @sNnm=SUM(CONVERT(int,num)) from @Tree  where FID=(select fid from @Tree where ID=@i )
        --print 's ||'+CONVERT(varchar(100),@i)+'|'+CONVERT(varchar(100), @sNnm)
        if @sNnm>0
         begin
           update  @Tree set Num =@sNnm from @Tree where PID=@f
         end
    SET  @i=@i+1
  end
--select * from @TreeBcb  order by FID desc,pid 
--select PID, FID,CASE Num WHEN 0 THEN Name ELSE Name+' ('+Num+')' END as Name  from @TreeBcb  order by FID desc,pid 


Return
end 


GO

2、调用

select PID, FID,CASE Num WHEN 0 THEN Name ELSE Name+' ('+Num+')' END as Name  from dbo.GetEmpDepNum(0)  order by FID ,pid 

 

转载于:https://www.cnblogs.com/yimeishui/p/5846791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值