我有一个具有以下结构和值的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>
答案 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