从最下面一层递归查询上级直到顶级。输出当前层的上级,上上级直到最顶级。
最底层长短不确定,可能是25位也有更可能是30位。求各位大神看看这个sql怎么写?

解决方案 »

  1.   

    额,数据结构就是这样的?用excel画一些测试数据和想要的结果吧
      

  2.   


    WITH CTE1
    AS
    (SELECT *,DENSE_RANK() OVER (ORDER BY LEN(INNERCODE)) AS RN
    FROM TABLE),CTE2
    AS
    (SELECT * FROM CTE1 A WHERE NOT EXISTS (SELECT 1 FROM CTE1 WHERE RN>A.RN) AND INNERCODE=最底层INNERCODE
    UNION ALL
    SELECT B.* FROM CTE1 B 
    JOIN CTE2 C ON B.RN=C.RN-1 AND C.INNERCODE LIKE '%'+B.INNERCODE+'%')SELECT * FROM CTE2