Asp.net 根据每个层次结构下的值按字母顺序排序
我有一个SQL表,其结构和值如下Asp.net 根据每个层次结构下的值按字母顺序排序,asp.net,sql,sql-server,sql-server-2008,treeview,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
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
------------------------------------------------------
希望结果表是清楚的。这意味着从父节点到子节点的每个节点都将按字母顺序排序。此外,如果每个节点下有任何子节点,则会在列出该节点的同级节点之前列出该节点。子节点也将按字母顺序排序。
更新
例如,AccountID 8和10以及9也位于parentAccount 4下。因此,当取account 4下的这三个,并根据companyname的字母顺序对它们进行排序时,顺序将与结果表中的顺序相同,即AA、CC、ZZ,希望您得到它。这里有一个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
帐户ID 8和10以及9也在父帐户4下。因此,当考虑账户4下的这三个项目,并根据公司名称的字母顺序对其进行排序时,顺序将与结果表中的AA、CC、ZZ相同,希望您能理解。可能更适合将您的评论添加到问题中,这会触发一个错误“列中的锚定和递归部分之间的类型不匹配”排序“的递归查询”CTEEX“。对不起,我不是SQL专家。因此,请求您的supportSET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE[dbo]。[TABLE_1]([Valuepath][nchar](10)NULL,[Accountid][int]IDENTITY(1,1)NOT NULL,[Company][nvarchar](2000)NULL,[parentId][int NULL,约束[PK TABLE___1]主键群集([Accountid]ASC)(PAD_INDEX=OFF,STATISTICS_norecocomputer=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY]ON]上的[PRIMARY]上的这个查询很好…但不幸的是,只有当我传递第一个accountID时它才会返回(这意味着parentid为0的人).如果我传递任何子accountid,它将返回空白..请帮我解决这个问题..请详细说明-“如果我传递任何子accountid,它将返回空白”好的。老板,我做到了。我声明了一个ParentID变量,并收集了我传递给查询的AccountID的ParentID。ParentID使用了instaed of ParentID=0,感谢您的出色查询。