首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请问一个sql查询的有关问题,要查询所有的子节点某一个属性的和

2012-03-05 
请教一个sql查询的问题,要查询所有的子节点某一个属性的和现在有一个工资的工作表,当中有三个属性,一个是

请教一个sql查询的问题,要查询所有的子节点某一个属性的和
现在有一个工资的工作表,当中有三个属性,一个是员工的ID,一个是员工直属上级的U_ID,还有一个就是此员工的薪水salary,我现在想给定一个ID,比如说0001,要查询他所有的下级的薪水之和,包括下级的下级,请问这个sql语句应该怎么实现,谢谢大家了啊!!!

[解决办法]
BOM结构可以用CTE来求 N多 

搜索BOM
[解决办法]
http://blog.csdn.net/canhui87/article/details/4566042
[解决办法]

SQL code
--给个现成的SET NOCOUNT ON;USE tempdb;GOIF OBJECT_ID('dbo.Employees') IS NOT NULL  DROP TABLE dbo.Employees;GOCREATE TABLE dbo.Employees(  empid   INT         NOT NULL PRIMARY KEY,  mgrid   INT         NULL    ,  empname VARCHAR(25) NOT NULL,  salary  MONEY       NOT NULL,  CHECK (empid <> mgrid));INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(1, NULL, 'David', $10000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(2, 1, 'Eitan', $7000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(3, 1, 'Ina', $7500.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(4, 2, 'Seraph', $5000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(5, 2, 'Jiru', $5500.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(6, 2, 'Steve', $4500.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(7, 3, 'Aaron', $5000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(8, 5, 'Lilach', $3500.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(9, 7, 'Rita', $3000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(10, 5, 'Sean', $3000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(11, 7, 'Gabriel', $3000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(12, 9, 'Emilia' , $2000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(13, 9, 'Michael', $2000.00);INSERT INTO dbo.Employees(empid, mgrid, empname, salary)  VALUES(14, 9, 'Didi', $1500.00);  DECLARE @root AS INT;SET @root = 3;WITH SubsCTEAS(  -- Anchor member returns root node  SELECT empid, empname,salary , 0 AS lvl  FROM dbo.Employees  WHERE empid = @root  UNION ALL  -- Recursive member returns next level of children  SELECT C.empid, C.empname,c.salary , P.lvl + 1  FROM SubsCTE AS P    JOIN dbo.Employees AS C      ON C.mgrid = P.empid)SELECT SUM(salary) FROM SubsCTE; 

热点排行