2014-01-15 3 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 я использую в TreeView в ASP.NET. Как вы можете видеть, существует родительское дочернее отношение в одной таблице. но проблема, с которой стоит сталкиваться, - это сортировка под каждым узлом просмотра дерева. Когда я связываю это, по-видимому, сортировки по древовидной структуре нет. Но мне нужно отсортировать эту таблицу в алфавитном порядке до привязки.

Таким образом, в результате чего таблетка должна быть такой

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 

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

Надежда таблица результатов ясно. Это означает, что каждый узел от родительского к дочернему будет отсортирован в алфавитном порядке. Также после каждого узла, если есть какие-либо дочерние узлы под ним, будут перечислены перед перечислением этого узла. И дочерние узлы также будут отсортированы в алфавитном порядке. Обновления В качестве примера идентификаторы учетной записи 8 & 10 и 9 также под родительским счетчиком 4. Поэтому, беря эти три, которые находятся под учетной записью 4 и сортируют их на основе имени компании в алфавитном порядке, порядок будет таким же, как в таблице результатов который является AA, CC, ZZ Надеюсь, вы получили его

+0

Оба accountIDs 8 & 10 и 9 также под parentAccount 4. Таким образом, при приеме этих трех, который по счету 4 и их сортировки на основе CompanyName в алфавитном порядке, заказ будет, как и в таблице результатов, которые это 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

Смежные вопросы