下面的数据是两列
   ID           name
----------   ----------
1         食品和饮料
   11         初级品
      111         主要用于工业
      112         主要用于家庭消费
   12         加工品
      121         主要用于工业
      122         主要用于家庭消费
2         未列名的工业供应品
   21         初级品
   22         加工品
3         燃料和润滑油
   32         加工品
      322        其他
4         资本货品(运输设备除外)及其零件和附件
   41         资本货品(运输设备除外)
   42         零件和附件
5         运输设备及其零件和附件
   52         其他
      522        非工业用
   53         零件和附件
6         未列名的消费品
   61         耐用品
   62         半耐用品
   63         非耐用品
我想回推如何设置数据表(可设置多个表,有主外键关系即可)才能更快更好地用select 查询语句得出上面的结果1         食品和饮料
   11         初级品
      111 主要用于工业
      112 主要用于家庭消费
   12         加工品
      121 主要用于工业
      122 主要用于家庭消费
2         未列名的工业供应品
   21         初级品
   22         加工品

解决方案 »

  1.   

    直接定义两列即可.
    ID varchar(3),name varchar(50)
      

  2.   

    --拷贝成文本显示不好,请在查询分析器里面看.create table tb(ID varchar(3),name varchar(50))
    insert into tb values('1',   '食品和饮料')
    insert into tb values('11',  '初级品')
    insert into tb values('111', '主要用于工业')
    insert into tb values('112', '主要用于家庭消费')
    insert into tb values('12',  '加工品')
    insert into tb values('121', '主要用于工业')
    insert into tb values('122', '主要用于家庭消费')
    insert into tb values('2',   '未列名的工业供应品')
    insert into tb values('21',  '初级品')
    insert into tb values('22',  '加工品')
    insert into tb values('3',   '燃料和润滑油')
    insert into tb values('32',  '加工品')
    insert into tb values('322', '其他')
    insert into tb values('4',   '资本货品(运输设备除外)及其零件和附件')
    insert into tb values('41',  '资本货品(运输设备除外)')
    insert into tb values('42',  '零件和附件')
    insert into tb values('5',   '运输设备及其零件和附件')
    insert into tb values('52',  '其他')
    insert into tb values('522', '非工业用')
    insert into tb values('53',  '零件和附件')
    insert into tb values('6',   '未列名的消费品')
    insert into tb values('61',  '耐用品')
    insert into tb values('62',  '半耐用品')
    insert into tb values('63',  '非耐用品')
    goselect id = 
      case len(id) when 1 then id
                   when 2 then '  ' + id
                   when 3 then '    ' + id
      end,
      name = 
      case len(id) when 1 then name
                   when 2 then '  ' + name
                   when 3 then '    ' + name
      end
    from tb
    drop table tb/*
    id      name                                                   
    ------- ------------------------------------------------------ 
    1       食品和饮料
      11      初级品
        111     主要用于工业
        112     主要用于家庭消费
      12      加工品
        121     主要用于工业
        122     主要用于家庭消费
    2       未列名的工业供应品
      21      初级品
      22      加工品
    3       燃料和润滑油
      32      加工品
        322     其他
    4       资本货品(运输设备除外)及其零件和附件
      41      资本货品(运输设备除外)
      42      零件和附件
    5       运输设备及其零件和附件
      52      其他
        522     非工业用
      53      零件和附件
    6       未列名的消费品
      61      耐用品
      62      半耐用品
      63      非耐用品(所影响的行数为 24 行)
    */
      

  3.   

    愚见:
    如果层数固定且不多,最好的办法是有几层用各个字段+1个id,上级直接列在字段中;如果每层的数据较多最分成多表也是可以的(如下关联)
    如果层数不定或多层,最好用三个字段,1id,1名称,1父id,不过查询会复杂
      

  4.   

    dawugui(潇洒老乌龟) ( ) 信誉:100  如何说你呢,这个表不是只用这个查询语句中的,他还有跟别的表有关的,晕,你这个就查不出类别,子类别,
      

  5.   

    有误,解决问题要紧,dawugui(潇洒老乌龟很热心,帮了很多人,连邹老大也有看错的时候
      

  6.   

    dawugui(潇洒老乌龟)  :见识了,高
      

  7.   

    愚见:
    如果层数固定且不多,最好的办法是有几层用各个字段+1个id,上级直接列在字段中;如果每层的数据较多最分成多表也是可以的(如下关联)
    如果层数不定或多层,最好用三个字段,1id,1名称,1父id,不过查询会复杂
    ——————————————————————————————
    是个好办法
      

  8.   

    dawugui(潇洒老乌龟) 高手高手高高手!!!
      

  9.   

    个人认为,这种东西,最好设计的时候多弄个parent栏位,基本的BOM表格式,怎么查都比较方便。id    parent_id    name