按字母顺序基于每个层次结构下的值排序

时间:2014-01-15 08:55:17

标签: asp.net sql sql-server sql-server-2008 treeview

我有一个具有以下结构和值的SQL表

AccountID   | Company  |  ValuePath  | ParentID
--------------------------------------------------
    1          ZA           0/1           0
    2          SS           1/2           1
    3          BB           1/3           1
    4          JJ           1/3/4         3
    5          AB           1/3/5         3
    6          ST           1/3/6         3
    7          KK           1/7           1
    8          ZZ           1/3/4/8       4
    9          AA           1/3/4/9       4
    10         CC           1/3/4/10      4
    11         AA           0/1           0
------------------------------------------------------

我在asp.net的树视图中使用的valuepath。如您所见,同一个表中存在父子关系。但我面临的问题是每个树视图节点下的排序。当我绑定它时,树视图上显然没有排序。但我需要在绑定之前按字母顺序对此表进行排序。

所以最终的平板电脑应该是这样的

AccountID   | Company  |  ValuePath  | ParentID
--------------------------------------------------
    11         AA           0/1           0
    1          ZA           0/1           0
    3          BB           1/3           1
    5          AB           1/3/5         3
    4          JJ           1/3/4         3
    9          AA           1/3/4/9       4
    10         CC           1/3/4/10      4
    8          ZZ           1/3/4/8       4
    6          ST           1/3/6         3
    7          KK           1/7           1
    2          SS           1/2           1

------------------------------------------------------

希望结果表格清晰。这意味着从父级到子级的每个节点都将按字母顺序排序。此外,在每个节点之后,如果其下面有任何子节点,将在列出节点兄弟之前列出。子节点也将按字母顺序排序。 的更新 作为示例,帐户ID 8&amp; 10和9也在parentAccount 4下面。所以当拿下账户4下的这三个并按字母顺序对公司名称进行排序时,订单将如结果表中的AA,CC,ZZ那样希望你得到它< / p>

1 个答案:

答案 0 :(得分:1)

这是一个在假设有一个种子节点的情况下工作的CTE。 它应该在你的情况下有两个种子节点,其中一个没有任何子节点。

WITH CTEEX(Company, Accountid, ValuePath  ,parentid, Sort)
AS (SELECT Company,Accountid,ValuePath  , parentid,Company as Sort FROM Table_1 
    WHERE parentId =0
    UNION ALL
    SELECT  a.Company,a.Accountid,a.ValuePath  ,a.parentid,CONVERT (nvarchar(2000), RTRIM(Sort ) + '|    '+ a.Company)
    FROM Table_1 a JOIN CTEEX b on a.parentId=b.Accountid
 )
SELECT Accountid,Company,  ValuePath  ,parentid
FROM CTEEX 
ORDER BY Sort