数据库表结构
C_ID C_NAME C_PRE_ID I_GRADE I_END I_YESNO I_TIME c_place
01 一号仓库 1 1 1 NULL NULL NULL
0101 1列 1 2 1 0 0 NULL
010101 1层 101 3 0 1 3 1
010102 2层 101 3 0 1 7 1
010103 3层 101 3 0 1 2 1
010104 4层 101 3 0 1 1 1
010105 5层 101 3 0 1 1 1
0102 2列 1 2 1 0 0 NULL
010201 1层 102 3 0 1 1 1
010202 2层 102 3 0 1 1 1
010203 3层 102 3 0 1 1 1
010204 4层 102 3 0 1 1 1
010205 5层 102 3 0 1 0 1现在想通过C_ID的值 如:条件为01 查询出以下结果010101 一号仓库1列1层
010102 一号仓库1列2层
010103 一号仓库1列3层
010104 一号仓库1列4层
010105 一号仓库1列5层
010201 一号仓库2列1层
0100202 一号仓库2列2层
010203 一号仓库2列3层
010204 一号仓库2列4层
010205 一号仓库2列5层
如条件为:0101 查询出以下结果 010101 一号仓库1列1层
010102 一号仓库1列2层
010103 一号仓库1列3层
010104 一号仓库1列4层
010105 一号仓库1列5层

解决方案 »

  1.   

    select * from Table
    where c_id like '01%'
    select * from Table
    where c_id like '0101%'
      

  2.   

    select c_id,(select c_name from DATATable where c_id='01'
    )+(select c_name from DATATable where c_id='0101')+ c_name from DATATable 
    where c_id like '01%'
    and c_id <> '01' and c_id<>'0101'
    select c_id,(select c_name from DATATable where c_id='01'
    )+(select c_name from DATATable where c_id='0101')+ c_name from DATATable 
    where c_id like '0101%'
    and c_id <> '01' and c_id<>'0101'
      

  3.   

    共同学习共同进步
    1
    select c.id,a.name[1,8] || b.name[1,4] ||c.name
     from ((test a left  join test b
    on a.id='01' and  b.id[1,2] = a.id and length(b.id)=4 )
    left join test c on c.id[1,4] = b.id and length(c.id)=6)2 
     select c.id,a.name[1,8] || b.name[1,4] ||c.name
     from ((test a left  join test b
    on a.id=b.id[1,2] and  b.id[1,2] = a.id and b.id='0101'    )
    left join test c on c.id[1,4] = b.id and length(c.id)=6)
      

  4.   

    发现BUG,这样写好
    1
    select c.id,a.name[1,8] || b.name[1,4] ||c.name
     from ((test a left  join test b
    on                b.id[1,2] = a.id and length(b.id)=4 )
    left join test c on c.id[1,4] = b.id and length(c.id)=6)
    where a.id='01'
    2  select c.id,a.name[1,8] || b.name[1,4] ||c.name
     from ((test a left  join test b
    on a.id=b.id[1,2] and  b.id[1,2] = a.id                    )
    left join test c on c.id[1,4] = b.id and length(c.id)=6)
    where b.id='0101'
      

  5.   

    我还没表达清楚
    这个结构层数是不固定的.
    也就是说
    010205 5层 102 3 0 1 0 1 这层下面还可以有数据
    c_ID     C_name C_pre_ID
    01020501 1列     010205  
    这条数据下还有
    c_ID     C_name C_pre_ID
    0102050101 1层     01020501
    如果给出01
    得到他下面的所有子集
    并显示详细名称,也就是上级名称 + 本身名称
    所以结构不能写死
    还有就是数据库也是不固定的.
    想找个通用的解决方法 
      

  6.   

    别再顶了,csdn有问题,刚写了一堆东东,没存上,7456!
    sql 应该来说是不能够满足你这么顶的了.
    只能从程序入手.
    建议:表结构增加个标志父字段(如果不可能增加,那使用你这个数型表的内容也行);
    两个递归:先找父再找子
    1 找父到你的根的方法
    2 找子到无子的方法
    方法给你了,余下的总不能让别人帮你干了吧,再帮你干那可太累人了,自己再自摸吧!不满足你的需求,也没有办法了.
    要么再看看后来者还有什么好方法.
      

  7.   

    select c_id,(select c_name from DATATable where c_id='01' 
    )+(select c_name from DATATable where c_id='01%' and I_GRADE=2)+ c_name from DATATable 
    where c_id like '01%' and I_GRADE=3
      

  8.   

    你说的方法我也想过,其实这个sql语句不仅仅是我写出来的这么简单.
    我这里还需要和其他的表进行关联,其他需要的信息都已经查出来了.
    就是不能够按要求获得详细名称.数据库是不可以动的.因为我没有那个权限.
    如果是递归的话,当层次很深的化,我想系统应该受不了.
    所以还是想在数据库上做点文章
      

  9.   

    declare @commandWhere1 varchar(2)
    declare @commandWhere2 varchar(4)
    declare @C_Warehouse varchar(20)
    declare @C_Column varchar(10)
    set @commandWhere1 = '01'
    set @commandWhere2 = '0101'
    set @C_Warehouse = (select C_NAME from DataTable where C_ID = @commandWhere1)
    set @C_Column = (select C_NAME from DataTable where C_ID = @commandWhere2)
    select @C_Warehouse + @C_Column + C_NAME from DataTable where C_ID like @commandWhere2 +'%'
    以上是第二个的第一个很类似,不过就是复杂点,中间需要一些处理,楼主自己想吧。
      

  10.   

    like 不能用在 int 类型的字段吧. LZ 可以尝试用除法: c_ID/传染参数与 数 1 来判断是否满足条件
    至于怎么得到" 一号仓库1列n层" 应该很简单的, 用类型转换可以了