当前位置: 代码迷 >> Sql Server >> 请问一个sql查询的有关问题,要查询所有的子节点某一个属性的和
  详细解决方案

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

热度:60   发布时间:2016-04-27 14:56:06.0
请教一个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;
  相关解决方案