现在有一个工资的工作表,当中有三个属性,一个是员工的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;