A表ID                   PARENT               MC
001.001              001                 拉丝机
001.001.001    001.001      轴承   
001.001.001.001      001.001.001          垫片
我想查询得到
如果我给的ID 为001.001.001.001,并且要示显示二级希望得到ID                 一级           二级                   MC
001.001.001.001    拉丝机         轴承                  垫片
如何我给的ID 为001.001.001,并且要示显示二级希望得到ID                 一级           二级                   MC
001.001.001          无          拉丝机                  轴承

解决方案 »

  1.   

    [code=SQL][
    IF NOT OBJECT_ID('tb') IS NULL 
        DROP TABLE tb
    create table tb (id varchar(50), parent varchar(50),mc varchar(50))
    insert into tb select '001.001','001','拉丝机'
    insert into tb select '001.001.001','001.001','轴承'
    insert into tb select '001.001.001.001','001.001.001','垫片'---根据底层物料查询上层物料(物料用途)with at as
    (
    select a.parent,a.id ,0 as levl,mc from tb a where a.id='001.001.001.001'--这里是条件
    union all
    select a.parent,a.id,levl - 1 ,a.mc from tb a join at on  a.id=at.parent
    )
    select a.id,一级,二级,mc from (
    select max(id)id,max(case when levl=-2 then mc else null end )as "一级",max(case when levl=-1 then mc else null end) as "二级" from at )a
    join tb on a.id=tb.id
    /*
    id 一级 二级 mc
    001.001.001.001 拉丝机 轴承 垫片/code]
      

  2.   

    既然是固定的是两级,就一直join就可以了,不需要使用cte递归
      

  3.   

    最好不固定,我只告诉你编码和级数就行显示,类似用函数,这样难一点getbm(001.001.001,2)   得到这个编码的二级
      

  4.   


    declare @leng int;
    declare @str varchar(50);
    set @str='001.001.001.001';-- 判定级数用这个公式就行,级数 = 字符的长度 - 去除“.”后的长度 (再加或减一个基本量)
    set @leng = len(@str) - len(REPLACE(@str, '.', '')) - 1 
    print @leng