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 [email protected] from @Tree where PID=@f
         end
    SET  @i[email protected]+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 
时间: 2024-11-06 15:09:54

SQL 由人员汇总到部门树递归合计总数函数的相关文章

jqxtree异步加载部门树

整体思路 A.要想实现异步加载第一次加载的是一级部门 B.加载一级部门,如果有子部门,部门前面带+号,没有子部门,部门前面没有+号(+号也就是点击可以展开) C.在sql中实现如果有子部门默认都加载一个子部门名称为“查询中...”的部门,id自己定唯一就行,这样就可以实现加载的一级部门到底前面带不带+号 D.当点击可以展开的部门时,将部门为“查询中...”的替换为异步查出来的部门 1.引入样式和js(差不多能用到的都引入吧以便以后能用到) <link rel="stylesheet&quo

改造一下jeecg中的部门树

假装有需求 关于 jeecg 提供的部门树,相信很多小伙伴都已经用过了,今天假装有那么一个需求 "部门树弹窗选择默认展开下级部门",带着这个需求再次去探索一下吧. 一.改造之前的部门选择树流程 1.1 t:departSelect标签 代码片段: <t:departSelect selectedNamesInputId="orgNames" selectedIdsInputId="orgIds"></t:departSelect

一个有趣的SQL Server 层级汇总数据问题

看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_name total_amout     NULL 2 Andrew 200     2 1 Nancy 100     2 3 Janet 120     3 4 Michael 80     1 5 Robert 50     每个员工的总销售额=自己的销售额+其下级员工的总销售额,     比如:     Andrew = 200_

SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)

--SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP  WITH CUBE  GROUPING SET(..) /******************************************************************************** *主题:SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP  WITH CUBE *说明:本文是个人学习的一些笔记和个人愚见 *      有很多

MySQL学习笔记—SQL服务器模式汇总

MySQL学习笔记-SQL服务器模式汇总 MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式.这样每个应用程序可以根据自己的需求来定制服务器的操作模式. 模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查.这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL. 你可以用–sql-mode="modes"选项启动mysqld来设置默认SQL模式.如果你想要重设,该值还可以为空(–sql-mode ="&q

oracle sql使用技巧汇总

1.删除一个表的重复数据 所用的table_name一样 DELETE FROM table_name a WHERE rowid > ( SELECT min(rowid) FROM table_name b WHERE b.id = a.id and b.name=a.name); 2.导出一个用户的所有信息 exp scott/[email protected] file=d:/scott.dmp3.导入一个用户的所有信息 imp scott/[email protected] file=

SQL实战——03. 查找各个部门当前(to_date=&#39;9999-01-01&#39;)领导当前薪水详情以及其对应部门编号dept_no

查找各个部门当前(to_date='9999-01-01')领导当前薪水详情以及其对应部门编号dept_noCREATE TABLE `dept_manager` (`dept_no` char(4) NOT NULL,`emp_no` int(11) NOT NULL,`from_date` date NOT NULL,`to_date` date NOT NULL,PRIMARY KEY (`emp_no`,`dept_no`));CREATE TABLE `salaries` (`emp_

26、汇总各个部门当前员工的title类型的分配数目

1.题目描述 汇总各个部门当前员工的title类型的分配数目,结果给出部门编号dept_no.dept_name.其当前员工所有的title以及该类型title对应的数目countCREATE TABLE `departments` (`dept_no` char(4) NOT NULL,`dept_name` varchar(40) NOT NULL,PRIMARY KEY (`dept_no`));CREATE TABLE `dept_emp` (`emp_no` int(11) NOT N

ThinkPHP中:使用递归写node_merge()函数

需求描述: 现有一个节点集合 可以视为一个二维数组 1 array(5) { 2 [0] => array(4) { 3 ["id"] => string(1) "1" 4 ["name"] => string(5) "Admin" 5 ["title"] => string(12) "后台应用" 6 ["pid"] => string(