none
邻接表中,有一个int类型的sort字段,怎样根据sort字段和pid字段进行对邻接表查询结果集的排序效果如同全部展开的树形控件一样的? RRS feed

  • 问题

  • 已知一个邻接表,有id,pid,sort三个字段。sort是专门用于含有同一个上级下的子节点排序用的,排序索引字段sort是已经存在数据表的字段列中,它不是出于在查询时要求而虚拟出来的列。那么怎么写一个sql语句,对每个含有相同上级节点的子节点进行排序,其在最终的查询结果集的显示效果,简单描述是如同全部展开的树形控件列表一样,排序效果图如下,不能使用存储过程完成。


    如果仅仅只有pid和sort字段还不行的话,那还需要什么呢?

    以上的效果是无限多级的假想的最终显示效果。目前仅仅只考虑最多显示二级以内的节点排序(根据参数的节点id,找出之下的两级以内节点,并显示如上图的排序效果),不显示3级以上的行节点话,查询效率高的sql语句怎么写?








    2019年4月26日 4:17

全部回复

  • Hi 便携式家园,

     

    以下代码是我根据对你描述的理解写出来供你参考:

    If Object_ID('test','U') Is Not Null Drop Table test

    go

    create table test 

    (id int,

    pid int)

    insert into test values 

    (1,0),

    (2,1),

    (3,1),

    (4,3),

    (5,3),

    (9,5),

    (10,5),

    (11,5),

    (12,5),

    (6,3),

    (14,3),

    (7,0),

    (8,0)

     

    select *,

    row_number()over(partition by pid order by id) sort

    from test 

     

    Hope this could help you .

    Best regards,

    Dedmon Dai


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com

    2019年4月26日 8:03