楼主是不是想实现那个treeview树型菜单显示呀?

解决方案 »

  1.   

    --如果楼主的以及仅是排序和加编号.那么
    declare @t table(parid char(3),subid char(3),strNO char(1))
    insert into @t
    select '001',null,'0' union
    select '002','001','0' union
    select '003','001','0' union
    select '004','001','1' union
    select '005','001','1' union
    select '006',null,'0' union
    select '007','006','0' union
    select '008','006','1' union
    select '009','001','0' union
    select '010','006','1' 
    select [no]=(select count(distinct isnull(subid,parid)+strNO) from @t where isnull(subid,parid)+strNO<=isnull(a.subid,a.parid)+a.strNO ),a.parid,a.subid,a.strno
    from @t a
    order by isnull(a.subid,a.parid),a.strNO
    /*结果
    1 001 NULL 0
    1 002 001 0
    1 003 001 0
    1 009 001 0
    2 004 001 1
    2 005 001 1
    3 006 NULL 0
    3 007 006 0
    4 008 006 1
    4 010 006 1*/
      

  2.   

    另外,我把表字段给弄反了,第一个字段是子ID(subID), 第二个才是父ID(parID)
    重新调整如下:
      

  3.   

    有这样一个表:表名叫test,这个表里有三个字段(parID,subID,strNO)即父ID,子ID和区别号,
    其中区别号只有0和1之分。表数据如下
    ___________________________
    |  parID  |  subID  |strNO|
    ---------------------------
    |  001    |  NULL   |  0  |    
    |  002    |  001    |  0  | 这可以看出,001是002的父ID
    |  003    |  001    |  0  | 003的父ID也是001
    |  004    |  001    |  1  | 004的父ID也是001只不过区分是1,它与父ID(001)的区分不同,
    |  005    |  001    |  1  | 关于区分后面就提到(你看,005的区分与父ID001的区分也不一样)
    |  006    |  NULL   |  0  | 注意:又出现了一个新的父ID(006)
    |  007    |  006    |  0  |
    |  008    |  006    |  1  |
    |  009    |  001    |  0  | <---提个醒:009的父ID可是001哦~
    |  010    |  006    |  1  |
    |   .     |   .     |  .  |
    |   .     |   .     |  .  |
    |   .     |   .     |  .  |要求对这个表进行重新分类,得到这样一个结果:先说要求:将所有父ID相同的归为一类,并加个编号,刚才不是提到过“区分”吗(即字段strNO)
    对于相同父ID下的子ID,与父ID相同的区分分为一组(这组要包括parID本身这条记录),与父ID不同
    的为另外一组,拿上面数据来说:
    001是父ID,它的子ID分别是002,003,004,005,009,由于002,003,009的区分与父ID001的区分相同
    所以将这三个记录与父ID放在一组,并给个编号为1,剩下的给个编号是2,
    再往下看006,这是另一个父ID,它的子ID分别是007,008,010;007的区分与它的父ID006的区分相同
    所以将007与006归为一组,给个编号是3,这一组剩下的就给个编号为4 ......
    这么依此类推,看一下表结果________________________________
    | No |  parID  |  subID  |strNO|
    --------------------------------
    | 1  |  001    |  NULL  |  0  |
    | 1  |  002    |  001    |  0  |
    | 1  |  003    |  001    |  0  |
    | 1  |  009    |  001    |  0  |
    | 2  |  004    |  001    |  1  |
    | 2  |  005    |  001    |  1  |
    | 3  |  006    |  NULL  |  0  |
    | 3  |  007    |  006    |  0  |
    | 4  |  008    |  006    |  1  |
    | 4  |  010    |  006    |  1  |
      

  4.   

    --数据多,你就按照处理语句来处理好了.我只按照你的数据提供了部分数据给你看结果.
    --测试表及数据
    declare @t table(subid char(3),parid char(3),strNO char(1))
    insert into @t
    select '001',null,'0' union
    select '002','001','0' union
    select '003','001','0' union
    select '004','001','1' union
    select '005','001','1' union
    select '006',null,'0' union
    select '007','006','0' union
    select '008','006','1' union
    select '009','001','0' union
    select '010','006','1' 
    --处理语句
    select [no]=(select count(distinct isnull(parid,subid)+strNO) from @t where isnull(parid,subid)+strNO<=isnull(a.parid,a.subid)+a.strNO ),a.subid,a.parid,a.strno
    from @t a
    order by isnull(a.parid,a.subid),a.strNO
    /*结果
    no   subid   parid  strno
    ---------------------------------
    1 001 NULL 0
    1 002 001 0
    1 003 001 0
    1 009 001 0
    2 004 001 1
    2 005 001 1
    3 006 NULL 0
    3 007 006 0
    4 008 006 1
    4 010 006 1*/
      

  5.   

    看不懂 SQL Server 啊 努力 奋斗-----------------------------------------------------