jobname                     jobcode
预算内                     01
机服中心                    0101
市局机关后勤服务经费 010101
制服清洗费          01010101
购买茶叶费          01010102
办公室                  0102
人教科                  0103
预算外                  02
机服中心(外)        0201现我需要按逐级显示如:预算内\机服中心\市局机关后勤服务经费\制服清洗费
按这样显及最未级

解决方案 »

  1.   

    -------------------------------------
    --  Author : liangCK 梁爱兰
    --  Comment: 小梁 爱 兰儿
    --  Date   : 2009-12-04 09:30:28
    -------------------------------------
     
    --> 生成测试数据: @tb
    DECLARE @tb TABLE (jobname varchar(20),jobcode varchar(8))
    INSERT INTO @tb
    SELECT '预算内','01' UNION ALL
    SELECT '机服中心','0101' UNION ALL
    SELECT '市局机关后勤服务经费','010101' UNION ALL
    SELECT '制服清洗费','01010101' UNION ALL
    SELECT '购买茶叶费','01010102' UNION ALL
    SELECT '办公室','0102' UNION ALL
    SELECT '人教科','0103' UNION ALL
    SELECT '预算外','02' UNION ALL
    SELECT '机服中心(外)','0201'--SQL查询如下:SELECT jobname,jobcode,STUFF(x,1,1,'') AS jobpath
    FROM @tb AS A
        OUTER APPLY (
            SELECT x = (
                     SELECT '/'+jobname AS [text()]
                     FROM @tb
                     WHERE A.jobcode LIKE jobcode + '%'
                     ORDER BY jobcode
                     FOR XML PATH('')
                  )
        ) AS B/*
    jobname jobcode jobpath
    预算内 01 预算内
    机服中心 0101 预算内/机服中心
    市局机关后勤服务经费 010101 预算内/机服中心/市局机关后勤服务经费
    制服清洗费 01010101 预算内/机服中心/市局机关后勤服务经费/制服清洗费
    购买茶叶费 01010102 预算内/机服中心/市局机关后勤服务经费/购买茶叶费
    办公室 0102 预算内/办公室
    人教科 0103 预算内/人教科
    预算外 02 预算外
    机服中心(外) 0201 预算外/机服中心(外)
    */