2016-10-04 8 views
1

私は部門リストを持つデータベースにテーブルを持っています。 here you can look at it階層的結論sql

私は、コードのこの作品を書いた:

WITH tree (Id, Name, Level) 
AS 
(
SELECT t.Id, t.Name, 0 AS Level 
FROM DepartmentsT AS t WHERE t.ParentId IS NULL 
UNION ALL 
SELECT d.Id, d.Name, Level+1 
FROM DepartmentsT AS d INNER JOIN tree ON tree.Id = d.ParentId 
) 

SELECT * FROM tree 

をそして私はだからここに質問を

this

を得ました。どのように私は "階層的に"表示するためにレコードを作ることができます、私は子供たちが彼らの親の下に表示された、彼らは今表示されている方法ではないのですか?今では、それらはネストされたレベルによってソートされ、単純なORDER BYは問題を解決しません。あなたの助けを願います。

WITH tree (Id, Name, Level, parents) AS (
     SELECT t.Id, t.Name, 0 AS Level, 
      cast(t.id as varchar(max)) as parents 
     FROM DepartmentsT t 
     WHERE t.ParentId IS NULL 
     UNION ALL 
     SELECT d.Id, d.Name, Level+1, 
      tree.parents + '-->' + cast(d.id as varchar(max)) 
     FROM DepartmentsT d INNER JOIN 
      tree 
      ON tree.Id = d.ParentId 
    ) 
SELECT id, name, level 
FROM tree 
ORDER BY parents; 

注:あなたは木を横断する

答えて

0

あなたはこの情報を維持することができますこれは、IDがすべて同じ長さであることを前提としています。

+0

あなたの答えをありがとう、ちょうど親にidsを変更し、それは働いた! – Gelo