2014-01-15 66 views
0

我有一个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 
------------------------------------------------------ 

的valuepath正在使用在asp.net一个TreeView。正如你所看到的,父子关系存在于同一个表中。但是面临的问题是每个树视图节点下的排序。当我绑定这个时,显然树形视图上没有排序。但是我需要在绑定之前按字母顺序排列这张表。

所以导致平板电脑应该是这样的

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 

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

希望的结果表就清楚了。这意味着父母之间的每个节点都将按字母顺序排序。在每个节点之后,如果有任何子节点,它将在列出该节点之前列出其兄弟节点。并且子节点也将按字母顺序排序。 更新 作为一个例子accountIDs 8 & 10和9也在parentAccount 4下。因此,当采取这三个在帐户4下并根据公司名字母排序它们时,顺序将如结果表中那样这是AA,CC,ZZ希望你得到它

+0

两者accountIDs 8 10和9也根据parentAccount 4.因此,采取这三种这是帐户4下并基于该公司名称的字母顺序对它们进行排序的情况下,为了将在结果表,该表是AA,CC,ZZ 希望你明白了。 –

+0

可能更适合将您的评论添加到问题 – Tanner

回答

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 
+0

如果可以帮助您,请将其标记为答案。 – DhruvJoshi

+0

其触发错误 “类型在递归查询”CTEEX“的”排序“列中的锚和递归部分之间不匹配。 对不起,我不是SQL专家。因此,请求您的支持 –

+0

使用此表 – DhruvJoshi