数据源 
类别编号 类别名称 类别级数 类别明细
01           原材料 1            1
02           辅料         1            0
0201 油品 2 1
0209 辅助材料其它 2 1
03 化学试剂 1 0
0301 气体 2 1
0302 化学试剂 2 1
0303 玻璃器皿 2 1
0309 化学试剂其它 2 1
04 工器具 1 0
0401 五金工具 2 1
0402 电工工具 2 1
0403 刀具刃具 2 1
0404 起重工具 2 1
0405 计量工具 2 1
0409 工器具其它 2 1
05 低值易耗品 1 0
0501 橡胶塑料 2 1
0502 油漆 2 1
0503 包装物 2 1
0504 消防器材 2 1
0509 低值易耗其它 2 1
06 劳防用品 1 0
0601 一般防护 2 1
0602 特殊防护 2 1
0609 劳防用品其它 2 1
07 办公用品 1 0
0701 办公家具 2 1
0702 办公耗材 2 1
0703 电子产品 2 1
0704 印刷品 2 1
0705 办公用品其他 2 1
08 备品备件 1 0
0801 通用密封件 2 1
0802 通用紧固件 2 1
0803 通用阀门 2 1
0804 钢材管件 2 1
0805 整机配件 2 1
0806 电气配件 2 1
0807 仪器仪表配件 2 1
0808 机加工非标件 2 1
0809 备品备件其它 2 1
09 整机设备 1 0
0901 机械设备 2 1
0902 非机械设备 2 1
0909 其它 2 1
10 其它 1 1
11 产成品 1 0
1101 主产品 2 0
110101 多晶硅 3 1
110102 次等品 3 1
1102 副产品 2 1
1103 非成品 2 1
1109 其它 2 1
12 固定资产 1 0
1201 电子设备 2 1
1202 车辆 2 1
1209 其它 2 1
13 过程产品 1 0
1301 一分厂 2 0
130101 一期氯化氢合成 3 0
13010101 来自氯氢装置的氯气 4 1
13010102 产出氯化氢气体 4 1
13010103 氯化氢合成炉炉内氮含氢 4 1
13010104 盐酸槽 4 1
13010105 碱液循环槽浓度 4 1
130102 一期三氯氢硅合成 3 0
13010201 三氯氢硅合成产品气 4 1
13010202 合成淋洗池碱液(运行系统) 4 1
130103 二期氯化氢合成 3 0
13010301 产出氯化氢气体 4 1
13010302 氯化氢合成炉炉内氮含氢 4 1
13010303 盐酸 4 1
13010304 来自氯氢装置的氯气 4 1
130104 二期三氯氢硅合成 3 0
13010401 三氯氢硅合成产品气 4 1
13010402 合成淋洗池碱液(运行系统) 4 1
130105 一期废料处理 3 0
13010501 一类碱性污水槽 4 1
13010502 一类酸性污水槽 4 1
13010503 一类一级滤液槽 4 1
13010504 一类二级滤液槽 4 1
13010505 二类废酸 4 1
13010506 二类一级滤液 4 1
13010507 二类二级滤液 4 1
130106 二期废料处理 3 0
13010601 淋洗塔废水 4 1
13010602 含硅废水 4 1
13010603 集水中和槽液 4 1
13010604 NaCl收集池液 4 1
13010605 回用水 4 1
13010606 蒸发器进料液 4 1
13010607 蒸发浓缩液 4 1
1302 二分厂 2 0
130201 一期氢化精馏 3 0
13020101 氢化一级塔进料 4 1
13020102 氢化一级塔顶采出 4 1
13020103 氢化一级塔釜馏出 4 1
13020104 氢化二级1塔进料 4 1
13020105 氢化二级2塔进料 4 1
13020106 氢化二级1塔顶采出 4 1
13020107 氢化二级2塔顶采出 4 1
13020108 氢化二级塔釜馏出 4 1
13020109 氢化三级塔进料 4 1
13020110 氢化三级塔顶液 4 1
13020111 氢化三级塔釜馏出 4 1
13020112 氢化一级塔进料槽 4 1
130202 一期精馏淋洗 3 0
13020201 淋洗塔碱液 4 1
130203 一期合成精馏 3 0
13020301 合成三氯氢硅贮槽 4 1
13020302 合成一级塔进料 4 1
13020303 合成一级塔顶采出 4 1
13020304 合成一级塔釜馏出物 4 1
13020305 合成二级塔顶采出 4 1
13020306 合成二级塔釜馏出物 4 1
13020307 合成二级5塔顶采出 4 1
13020308 合成二级5塔釜馏出物 4 1
13020309 沉淀槽 4 1
13020310 合成三级塔进料 4 1
13020311 合成三级塔顶采出 4 1
13020312 合成三级塔釜馏出物 4 1
13020313 合成四级塔顶采出 4 1
13020314 合成四级塔釜馏出物 4 1
13020315 合成五级塔顶采出 4 1
13020316 合成五级塔釜馏出物 4 1
13020317 精三氯氢硅缓冲槽 4 1
13020318 合成六级塔顶液 4 1
13020319 合成七级塔顶液 4 1
130204 二期还原精馏 3 0
13020401 精制三氯氢硅储槽 4 1
13020402 还原精馏一级塔01T0621A进料 4 1
13020403 还原精馏一级塔01T0621A塔顶液 4 1
13020404 还原精馏一级塔01T0621A塔釜液 4 1
13020405 还原精馏二级塔01T0622A塔顶液 4 1
13020406 还原精馏二级塔01T0622A塔釜液 4 1
13020407 还原精馏一级塔01T0621B进料 4 1
13020408 还原精馏一级塔01T0621B塔顶液 4 1
13020409 还原精馏一级塔01T0621B塔釜液 4 1
13020410 还原精馏二级塔01T0622B塔顶液 4 1
13020411 还原精馏二级塔01T0622B塔釜液 4 1
13020412 还原氯硅烷缓冲槽 4 1
130205 一期还原精馏 3 0
13020501 还原一级塔进料 4 1
13020502 还原一级塔顶采出 4 1
13020503 还原一级塔釜馏出 4 1
13020504 还原二级1塔进料 4 1
13020505 还原二级2塔进料 4 1
13020506 还原二级1塔顶采出 4 1
13020507 还原二级2塔顶采出 4 1
13020508 还原二级1塔釜馏出 4 1
13020509 还原二级2塔釜馏出 4 1
13020510 还原三级1塔顶液 4 1
13020511 还原三级2塔顶液 4 1
13020512 还原三级1塔釜馏出 4 1
13020513 还原三级2塔釜馏出 4 1
13020514 还原一级塔进料槽 4 1
130206 一期CDI-1 3 0
13020601 一期CDI-1回收氢气 4 1
13020602 一期CDI-1回收氯化氢 4 1
13020603 一期还原回收氯硅烷组分 4 1
130207 一期CDI-2 3 0
13020701 一期CDI-2回收氢气 4 1
13020702 一期CDI-2回收氯化氢 4 1
13020703 一期氢化回收氯硅烷组分 4 1
130208 一期CDI-3 3 0
13020801 一期CDI-3回收氢气 4 1
13020802 一期CDI-3回收氯化氢 4 1
13020803 一期合成回收氯硅烷组分 4 1
130209 二期氢化精馏 3 0
13020901 氢化精馏一级塔进料 4 1
13020902 氢化精馏一级塔顶液 4 1
13020903 氢化精馏一级塔釜液 4 1
13020904 氢化精馏二级塔顶液 4 1
13020905 氢化精馏二级塔釜液 4 1
13020906 氢化氯硅烷缓冲槽 4 1
13020907 精制三氯氢硅储槽 4 1
130210 二期精馏淋洗 3 0
13021001 淋洗塔碱液 4 1
130211 二期CDI-1 3 0
13021101 二期CDI-1回收氢气 4 1
13021102 二期CDI-1回收氯化氢 4 1
13021103 二期还原回收氯硅烷组分 4 1
130212 二期CDI-2 3 0
13021201 二期CDI-2回收氢气 4 1
13021202 二期CDI-2回收氯化氢 4 1
13021203 二期氢化回收氯硅烷组分 4 1
130213 二期CDI-3 3 0
13021301 二期CDI-3回收氢气 4 1
13021302 二期CDI-3回收氯化氢 4 1
13021303 二期合成回收氯硅烷组分 4 1
130214 二期CDI淋洗 3 0
13021401 淋洗塔碱液 4 1
130215 二期循环粗四氯化硅精馏 3 0
13021501 四氯化硅提纯塔01T0633A进料 4 1
13021502 四氯化硅提纯塔01T0633A顶液 4 1
13021503 四氯化硅提纯塔01T0633A釜液 4 1
13021504 四氯化硅提纯塔01T0633B进料 4 1
13021505 四氯化硅提纯塔01T0633B顶液 4 1
13021506 四氯化硅提纯塔01T0633B釜液 4 1
130216 二期合成精馏 3 0
13021601 合成氯硅烷储槽 4 1
13021602 粗三氯氢硅储槽 4 1
13021603 回收三氯氢硅储槽 4 1
13021604 合成精制三氯氢硅质检罐 4 1
13021605 合成精制四氯化硅储槽 4 1
13021606 合成二级三氯氢硅储槽 4 1
13021607 粗馏一级塔进料 4 1
13021608 粗馏一级塔顶液 4 1
13021609 粗馏一级塔釜液 4 1
13021610 粗馏二级塔顶液 4 1
13021611 粗馏二级塔釜液 4 1
13021612 粗馏三级塔顶液 4 1
13021613 粗馏三级塔釜液 4 1
13021614 合成精馏一级塔进料 4 1
13021615 合成精馏一级塔顶液 4 1
13021616 合成精馏一级塔釜液 4 1
13021617 合成精馏二级塔顶液 4 1
13021618 合成精馏二级塔釜液 4 1
13021619 合成精馏三级塔顶液 4 1
13021620 合成精馏三级塔釜液 4 1
13021621 合成精馏四级塔顶液 4 1
13021622 合成精馏四级塔釜液 4 1
13021623 二级三氯氢硅处理一级塔进料 4 1
13021624 二级三氯氢硅处理一级塔顶液 4 1
13021625 二级三氯氢硅处理一级塔釜液 4 1
13021626 二级三氯氢硅处理二级塔顶液 4 1
13021627 二级三氯氢硅处理二级塔釜液 4 1
130217 一期还原氢化精馏 3 0
13021701 精三氯氢硅贮槽 4 1
13021702 精四氯化硅贮槽 4 1
13021703 还原氢化四级塔1塔进料 4 1
13021704 还原氢化四级塔2塔进料 4 1
13021705 还原氢化四级塔1顶采出 4 1
13021706 还原氢化四级塔2顶采出 4 1
13021707 还原氢化四级塔1釜馏出 4 1
13021708 还原氢化四级塔2釜馏出 4 1
130218 二期精馏 3 0
13021801 精制四氯化硅储槽 4 1
13021802 循环二级三氯氢硅储槽 4 1
1303 三分厂 2 0
130301 一期还原、氢化 3 0
13030101 俄罗斯还原炉电极冷却水 4 1
13030102 德国还原炉电极冷却水 4 1
13030103 整流器冷却水 4 1
130302 二期还原、氢化 3 0
13030201 电极和视孔冷却水 4 1
13030202 整流器冷却水 4 1
13030203 电极冷却水 4 1
13030204 淋洗塔碱液 4 1
1304 四分厂 2 0
130402 一期高纯水 3 0
13040201 高纯水 4 1
130403 一期循环水 3 0
13040301 循环水 4 1
130404 一期硅芯料 3 0
13040401 硅芯料 4 1
130406 二期高纯水 3 0
13040601 高纯水 4 1
130407 二期循环水 3 0
13040701 循环水 4 1
130408 二期硅芯料 3 0
13040801 硅芯料 4 1
130409 硅芯 3 1
1305 五分厂 2 0
130501 一期制氢工序 3 0
13050101 氢气 4 1
13050102 电解液 4 1
13050103 纯水 4 1
13050104 氮气置换 4 1
130502 二期制氢工序 3 0
13050201 氢气 4 1
13050202 电解液 4 1
13050203 纯水 4 1
13050204 氮气置换 4 1
130503 一次盐水工序 3 0
13050301 盐水 4 1
13050302 盐泥滤饼 4 1
13050303 氯化铁溶液 4 1
13050304 次氯酸钠溶液 4 1
13050305 盐酸 4 1
13050306 碳酸钠溶液 4 1
13050307 氯化钡溶液 4 1
130504 电解工序 3 0
13050401 二次盐水 4 1
13050402 阳极加料盐水 4 1
13050403 阳极淡盐水 4 1
13050404 阴极碱液 4 1
13050405 总管湿氯气 4 1
13050406 成品碱 4 1
13050407 淡盐水 4 1
13050408 脱氯后淡盐水 4 1
13050409 高纯盐酸 4 1
13050410 Na2SO3溶液 4 1
13050411 总管湿氢气 4 1
130505 氯氢及废气处理工序 3 0
13050501 循环硫酸 4 1
13050502 过料硫酸 4 1
13050503 氯压机压缩循环酸 4 1
13050504 氯气 4 1
13050505 次氯酸钠溶液 4 1
13050506 配制碱液 4 1
13050507 次氯酸钠溶液 4 1
13050508 尾气 4 1
13050509 氢气 4 1
130506 液氯工序 3 0
13050601 纳氏泵酸 4 1
13050602 排污液 4 1
13050603 液化尾气 4 1
13050604 氯气 4 1
130507 盐酸工序 3 0
13050701 氢气 4 1
13050702 液氯尾气 4 1
13050703 高纯盐酸 4 1
13050704 尾气吸收塔尾气 4 1
1306 六分厂 2 0
130601 一期冷冻工序 3 0
13060101 冷冻盐水 4 1
130602 一期空压制氮工序 3 0
13060201 氮气 4 1
13060202 仪表气 4 1
130603 一期脱盐水工序 3 0
13060301 反渗透进水 4 1
13060302 反渗透产水 4 1
13060303 混床产水 4 1
130604 一期循环水工序 3 0
13060401 一次水 4 1
13060402 循环水 4 1
130605 二期冷冻工序 3 0
13060501 冷冻盐水 4 1
130606 二期空压制氮工序 3 0
13060601 氮气 4 1
13060602 仪表气 4 1
130607 二期脱盐水工序 3 0
13060701 混床产水 4 1
13060702 反渗透进水 4 1
13060703 反渗透产水 4 1
13060704 次氯酸钠 4 1
130608 二期循环水工序 3 0
13060801 循环水 4 1
130609 锅炉工序 3 0
13060901 蒸汽冷凝液 4 1
13060902 锅炉给水 4 1
13060903 锅炉炉水 4 1
13060904 锅炉饱和蒸汽 4 1
90 废弃 1 1
99 备查 1 1类别明细 0表示还有 子集  1表示没有子集
要求查询结果 谢谢各位了

解决方案 »

  1.   


    create table t(sNO nvarchar(20),sName nvarchar(20),sj int,nhavChild int)
    insert into t(sNo,sName,sj,nhavChild) select 
    '01','原材料','1','1' union all select
    '02',              '辅料',            1,               0 union all select
    '0201',    '油品',    2,    1 union all select
    '0209',   '辅助材料其它',    2,    1 union select
    '03',    '化学试剂',    1,    0 union select
    '0301',    '气体',    2,    1 union select
    '0302',    '化学试剂',    2,   1 union select
    '0303',    '玻璃器皿',    2,   1with c as(
    select * from t where len(sNO)=2 union all 
       select t.* from t  inner join c on left(t.sNO,2)=c.sNO and len(t.sNO)-2=len(c.sNO) 

    select c.sno,
           case c.sj when 1 then c.sName 
                     when 2 then t.sName 
                     when 3 then t3.sname 
                     else t4.sname end 
           as 第一类,
           case c.sj when 1 then '' 
                     when 2 then c.sName
                     when 3 then t.sName
                     else t3.sname end
           as 第二类, 
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then c.sName
                     else t.sname end
           as 第三类,
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then ''
                     else c.sname end
           as 第四类
    from c 
    left join t 
          on left(c.sNO,2)=t.sNO and len(c.sNO)-2=len(t.sNO)
    left join t as t3 
          on left(c.sno,4)=t3.sno and len(c.sno-4)=len(t3.sNO)
    left join t as t4 
          on left(c.sno,6)=t4.sno and len(c.sno-6)=len(t4.sno)
    order by c.sno
    sno                  第一类                  第二类                  第三类                  第四类
    -------------------- -------------------- -------------------- -------------------- --------------------
    01                   原材料                                                            
    02                   辅料                                                             
    0201                 辅料                   油品                                        
    0209                 辅料                   辅助材料其它                                    
    03                   化学试剂                                                           
    0301                 化学试剂                 气体                                        
    0302                 化学试剂                 化学试剂                                      
    0303                 化学试剂                 玻璃器皿                                      (8 行受影响)
    是这样么?
      

  2.   


    create table t(sNO nvarchar(20),sName nvarchar(20),sj int,nhavChild int)
    insert into t(sNo,sName,sj,nhavChild) select 
    '01','原材料','1','1' union all select
    '02',              '辅料',            1,               0 union all select
    '0201',    '油品',    2,    1 union all select
    '0209',   '辅助材料其它',    2,    1 union all select
    '03',    '化学试剂',    1,    0 union all select
    '0301',    '气体',    2,    1 union all select
    '0302',    '化学试剂',    2,   1 union all select
    '0303',    '玻璃器皿',    2,   1with c as(
        select * from t where len(sNO)=2 union all 
       select t.* from t  inner join c on left(t.sNO,2)=c.sNO and len(t.sNO)-2=len(c.sNO) 

    select c.sno,
           case c.sj when 1 then c.sName 
                     when 2 then t.sName 
                     when 3 then t3.sname 
                     else t4.sname end 
           as 一级类,
           case c.sj when 1 then '' 
                     when 2 then c.sName
                     when 3 then t.sName
                     else t3.sname end
           as 二级类, 
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then c.sName
                     else t.sname end
           as 三级类,
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then ''
                     else c.sname end
           as 四级类 
    from c 
    left join t 
          on left(c.sNO,2)=t.sNO and len(c.sNO)-2=len(t.sNO)
    left join t as t3 
          on left(c.sno,4)=t3.sno and len(c.sno)-4=len(t3.sNO)
    left join t as t4 
          on left(c.sno,6)=t4.sno and len(c.sno)-6=len(t4.sno)
    order by c.sno刚才有些地方没有注意len(c.sno)-4=len(t3.sNO)
    写成了len(c.sno-4)=len(t3.sNO)
      

  3.   

    刚才看了下前面那个with语句没有什么用,多余的工作,你的数据库要是不是sqlserver2005及以上是不不支持的。去掉with稍改下create table t(sNO nvarchar(20),sName nvarchar(20),sj int,nhavChild int)
    insert into t(sNo,sName,sj,nhavChild) select 
    '01','原材料','1','1' union all select
    '02',              '辅料',            1,               0 union all select
    '0201',    '油品',    2,    1 union all select
    '0209',   '辅助材料其它',    2,    1 union all select
    '03',    '化学试剂',    1,    0 union all select
    '0301',    '气体',    2,    1 union all select
    '0302',    '化学试剂',    2,   1 union all select
    '0303',    '玻璃器皿',    2,   1 
    select c.sno,
           case c.sj when 1 then c.sName 
                     when 2 then t.sName 
                     when 3 then t3.sname 
                     else t4.sname end 
           as 一级类,
           case c.sj when 1 then '' 
                     when 2 then c.sName
                     when 3 then t.sName
                     else t3.sname end
           as 二级类, 
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then c.sName
                     else t.sname end
           as 三级类,
           case c.sj when 1 then '' 
                     when 2 then ''
                     when 3 then ''
                     else c.sname end
           as 四级类 
    from t as c 
    left join t 
          on left(c.sNO,2)=t.sNO and len(c.sNO)-2=len(t.sNO)
    left join t as t3 
          on left(c.sno,4)=t3.sno and len(c.sno)-4=len(t3.sNO)
    left join t as t4 
          on left(c.sno,6)=t4.sno and len(c.sno)-6=len(t4.sno)
    order by c.sno
      

  4.   

    create table #t(sNO nvarchar(20),sName nvarchar(20),sj int,nhavChild int)
    insert into #t(sNo,sName,sj,nhavChild) select 
    '01','原材料','1','1' union all select
    '02',              '辅料',            1,               0 union all select
    '0201',    '油品',    2,    1 union all select
    '0209',   '辅助材料其它',    2,    1 union all select
    '03',    '化学试剂',    1,    0 union all select
    '0301',    '气体',    2,    1 union all select
    '0302',    '化学试剂',    2,   1 union all select
    '0303',    '玻璃器皿',    2,   1
    select * from #t
    select sno,
          MAX(case when sj=1 then sName else '' end) as 一级类,
          MAX(case when sj=2 then sName else '' end) as 二级类,
          MAX(case when sj=3 then sName else '' end) as 三级类,
          MAX(case when sj=4 then sName else '' end) as 四级类
    from #t
    group by sNO
      

  5.   


    create table #1 (id nvarchar(10),name nvarchar(14),num int,num1 int)
    insert into #1 
    select '09' ,'整机设备',1 ,0 union all
    select '0901' , '机械设备' ,2 ,1 union all
    select '10', '其它',1,1 union all
    select '11', ' 产成品',1, 0 union all
    select '1101','主产品',2,0 union all
    select '110101', '多晶硅', 3 ,1 union all
    select '13 ','过程产品', 1, 0 union all
    select '1301',' 一分厂',2,0 union all
    select '130101 ','一期氯化氢合成 ',3 ,0 union all
    select '13010101 ','来自氯氢装置的氯气',4 ,1
    create table b(name1 nvarchar(14),name2 nvarchar(14), id nvarchar(10))
    insert into b
    select  name as name1,name2,id2 from #1
    outer apply (select a.name as name2,a.id as id2 from #1 a where left(#1.id,6)=a.id )zcreate table c(name1 nvarchar(14),name2 nvarchar(14), name3 nvarchar(14),id3 nvarchar(10))
    insert into c
    select  name1,name2,name3,id3 from b
    outer apply (select c.name2 as name3,id as id3 from b c where left(b.id,4)=c.id )wcreate table d(name1 nvarchar(14),name2 nvarchar(14), name3 nvarchar(14),name4 nvarchar(14))
    insert into d
    select  name1,name2,name3,name4 from c
    outer apply (select d.name3 as name4 from c d where left(c.id3,2)=d.id3 )xselect c.id,d.name4 as 一级类,
           case c.num when 1 then '' 
                     else d.name3 end as 二级类, 
           case c.num when 1 then '' 
                     when 2 then ''
                     else d.name2 end as 三级类,
           case c.num when 1 then '' 
                     when 2 then ''
                     when 3 then ''
                     else d.name1 end as 四级类 
    from d join  #1 c on d.name1=c.name