我看的例子怎么都是对多个表的,
能否从一个表里面进行递归呢?例如表 treeid  pid text
--  --- ----
1    0   t1
2    0   t2
3    1   t1_1
4    1   t1_2
5    3   t1_1_1当我选中id =1的时候,如何把id=1下面的所有子节点得到呢?

解决方案 »

  1.   

    USE demo
    GO
    CREATE TABLE CarParts
    (
    CarID INT NOT NULL,
    Part VARCHAR(15),
    SubPart VARCHAR(15),
    Qty INT
    )
    GO
    INSERT CarParts VALUES (1, 'Body', 'Door', 4)
    INSERT CarParts VALUES (1, 'Body', 'Trunk Lid', 1)
    INSERT CarParts VALUES (1, 'Body', 'Car Hood', 1)
    INSERT CarParts VALUES (1, 'Door', 'Handle', 1)
    INSERT CarParts VALUES (1, 'Door', 'Lock', 1)
    INSERT CarParts VALUES (1, 'Door', 'Window', 1)
    INSERT CarParts VALUES (1, 'Body', 'Rivets', 1000)
    INSERT CarParts VALUES (1, 'Door', 'Rivets', 100)
    INSERT CarParts VALUES (1, 'Door', 'Mirror', 1)
    GO
    SELECT * FROM CarParts
    GO
    WITH CarPartsCTE(SubPart, Qty)
    AS
    (
    -- 固定成员 (AM):
    -- SELECT查询无需参考CarPartsCTE
    SELECT SubPart, Qty
    FROM CarParts
    WHERE Part = 'Body'
    UNION ALL
    -- 递归成员 (RM):
    -- SELECT查询参考CarPartsCTE
    SELECT CarParts.SubPart, CarPartsCTE.Qty * CarParts.Qty
    FROM CarPartsCTE
    INNER JOIN CarParts ON CarPartsCTE.SubPart = CarParts.Part
    WHERE CarParts.CarID = 1
    )
    -- 外部查询
    SELECT SubPart, SUM(Qty) AS TotalNUM
    FROM CarPartsCTE
    GROUP BY SubPart