Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQLServer2005查询问题_Sql_Sql Server 2005 - Fatal编程技术网

SQLServer2005查询问题

SQLServer2005查询问题,sql,sql-server-2005,Sql,Sql Server 2005,我有一个包含以下字段的表 监督员 埃皮德 这就像是一个推荐计划。一个人可以推荐他下面的三个人,即, 3指的是三个人,即458,同样4指的是910,11,同样8指的是12,13,是这样的 我想要一个查询来获得一个家伙下面的下线成员总数,比如说3,你可以使用递归 像这样的 DECLARE @Table TABLE( Supervisorid INT, Empid INT ) INSERT INTO @Table SELECT 3, 4 INSERT INTO @

我有一个包含以下字段的表

  • 监督员
  • 埃皮德
这就像是一个推荐计划。一个人可以推荐他下面的三个人,即, 3指的是三个人,即458,同样4指的是910,11,同样8指的是12,13,是这样的


我想要一个查询来获得一个家伙下面的下线成员总数,比如说3,你可以使用递归

像这样的

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

您可以使用递归

像这样的

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

考虑重新措词/格式化你的问题。很难理解。谢谢@OMG Ponies.:)仍然很难理解第二段THO(不是因为格式化,而是因为措辞不好)。考虑重新措词/格式化你的问题。很难理解。谢谢@OMG Ponies.:)第二段仍然很难理解(不是因为格式,而是因为措词不当)。