2010-10-22 45 views
0

我有一个包含以下字段的Sql Server2005中的查询问题

  • Supervisorid
  • EMPID表

这就像一个推荐计划。一个家伙可以参考他下面的3个家伙即 3指的是三个家伙即4 5 8同样4指的是9 10和11同样8指的是12,13它是这样去的

我想要查询得到一个家伙下线总成员数目3

+0

考虑重新措辞/格式化你的问题。很难理解。 – RPM1984 2010-10-22 04:42:28

+0

感谢@OMG小马。 :)仍然很难理解第二段寿(不是因为格式化,而是因为措辞不佳)。 – RPM1984 2010-10-22 04:43:24

回答

3

你可以使用递归CTE

像这样的事情

DECLARE @Table TABLE(
     Supervisorid INT, 
     Empid INT 
) 

INSERT INTO @Table SELECT 3, 4 
INSERT INTO @Table SELECT 3, 5 
INSERT INTO @Table SELECT 3, 8 

INSERT INTO @Table SELECT 4, 9 
INSERT INTO @Table SELECT 4, 10 
INSERT INTO @Table SELECT 4, 11 

INSERT INTO @Table SELECT 8, 12 
INSERT INTO @Table SELECT 8, 13 

DECLARE @ID INT 
SELECT @ID = 3 

;WITH Vals AS (
     SELECT * 
     FROM @Table 
     WHERE SuperVisorID = @ID 
     UNION ALL 
     SELECT v.SuperVisorID, 
       t.Empid 
     FROM Vals v INNER JOIN 
       @Table t ON v.Empid = t.Supervisorid 
) 
SELECT SuperVisorID, 
     COUNT(Empid) Total 
FROM Vals 
GROUP BY SuperVisorID