例如:
A      B
-----------
A1     B1
A1     B2
B2     BB21
B2     BB22
B21    BBB1
需要得到的结果是
A      B
------------
A1     B1
A1     B2
A1     BB21
A1     BB22
A1     BBB1
B2     BB21
B2     BB22
B2     BBB1
B21    BBB1

解决方案 »

  1.   

    --数据是否有点问题啊?是不是这样啊??
    A      B
    -----------
    A1     B1
    A1     B2
    B2     B21
    B2     BB22
    B21    BBB1
      

  2.   

    --环境
    CREATE TABLE _t (A varchar(10), B varchar(10))
    insert into _t select 'A1','B1'
    UNION ALL SELECT 'A1','B2'
    UNION ALL SELECT 'B2','B21'
    UNION ALL SELECT 'B2','BB22'
    UNION ALL SELECT 'B21','BBB1'
    --函数
    CREATE FUNCTION F_GET(@A VARCHAR(10))
    RETURNS @T TABLE(A VARCHAR(10), B VARCHAR(10),LEVEL INT)
    AS
    BEGIN
    WITH F_TABLE(A,B,LVL)
    AS
    (
    SELECT A,B,0 FROM _T
    WHERE A=@A
    UNION ALL
    SELECT A.A,A.B,B.LVL+1
    FROM _T A,F_TABLE B WHERE A.A=B.B
    )
    INSERT INTO @T
    SELECT   * FROM F_TABLE
    RETURN
    END--查询
    SELECT DISTINCT D.A,B.B FROM _t D
    CROSS APPLY DBO.F_GET(D.A) B
    --结果
    /*
    A          B
    ---------- ----------
    A1         B1
    A1         B2
    A1         B21
    A1         BB22
    A1         BBB1
    B2         B21
    B2         BB22
    B2         BBB1
    B21        BBB1(9 行受影响)*/
      

  3.   

    只到孙子节点吗?select A, B from Table
    UNION
    select P.A A, C.B B from Table P, Table C
    where P.B = C.A
      

  4.   

    如果孙子下面可能还有2层,是否也可以?
    sql 应该怎么写?
    谢谢