表如下
ID   start(出发地)   end(目的地) 
1    A              B
2    B              D
3    E              F
4    D              M
5    B              K
6    G              W
写一SQL语句,任意输入一出发地(如:B)查询出可以到达的所有目的地(包括间接达到),和中间地的个数
输出列如下:
出发地   目的地   中间地的个数
B       D       1
B       M       2
。。

解决方案 »

  1.   

    ---------------------------------
    --  Author: liangCK 小梁
    --  Date  : 2008-11-18 17:10:25
    ---------------------------------
     
    --> 生成测试数据: @T
    DECLARE @T TABLE (ID INT,start VARCHAR(1),[end] VARCHAR(1))
    INSERT INTO @T
    SELECT 1,'A','B' UNION ALL
    SELECT 2,'B','D' UNION ALL
    SELECT 3,'E','F' UNION ALL
    SELECT 4,'D','M' UNION ALL
    SELECT 5,'B','K' UNION ALL
    SELECT 6,'G','W'--SQL查询如下:;WITH Liang AS
    (
        SELECT
            start,
            [end],
            lvl=1
        FROM @T
        WHERE start='B'
        
        UNION ALL
        
        SELECT
            A.start,
            B.[end],
            lvl+1
        FROM Liang AS A
            JOIN @T AS B
                ON A.[end]=B.start
    )
    SELECT *
    FROM Liang/*
    start end  lvl
    ----- ---- -----------
    B     D    1
    B     K    1
    B     M    2(3 行受影响)
    */