2012-01-20 20 views
1

クエリを参照してください。 私はIDを与えるときにクエリを開発したい すべての名前を再帰的に取得する必要があります。たとえば、 私は3を与えます。私は顧客、セットアップ、管理者の名前を取得する必要があります 私はそれを取得する必要がありますtemporarytableとカーソルを使用せずに。 ご協力いただきありがとうございます。すべての親の名前を取得する方法

のSQLServerを想定し
DECLARE @tblPagePath TABLE 
         (id int, 
         name varchar(100), 
         pid int); 

INSERT INTO @tblPagePath 
     (id, name, pid) 
VALUES (1, -- id - int 
      'Admin', -- name - varchar(100) 
      null -- pid - int 
     ) 
INSERT INTO @tblPagePath 
     (id, name, pid) 
VALUES (2, -- id - int 
      'Setup', -- name - varchar(100) 
      1 -- pid - int 
     )      

INSERT INTO @tblPagePath 
     (id, name, pid) 
VALUES (3, -- id - int 
      'Customer', -- name - varchar(100) 
      2 -- pid - int 
     );  



SELECT * 
FROM @tblPagePath 
+0

のSQL Server 2008をお楽しみください。 – Gopu

答えて

0
WITH C AS 
(
    SELECT T.id, 
     T.name, 
     T.pid 
    FROM @tblPagePath AS T 
    WHERE T.id = 3 
    UNION ALL 
    SELECT T.id, 
     T.name, 
     T.pid 
    FROM @tblPagePath AS T 
    INNER JOIN C 
     ON C.pid = T.id 

) 
SELECT * 
FROM C 
--WHERE C.id <> 3 
1

;with cte as (select id, id pid from @tblPagePath a 
       where not exists (select null from @tblPagePath c 
           where a.id=c.pid) 
       union all 
       select c.id, t.pid 
       from @tblPagePath t 
       join cte c on c.pid =t.id) 
select t.id, t.name 
from @tblPagePath t 
join cte c on t.id = c.pid and c.id = @id 
2
WITH Parents (ID, pid, Level, Name) 
AS 
(
    SELECT ID 'ID', 
     pid 'ParentId', 
     1 as level, 
     Name 'Name' 
    FROM tblPagePath 
    WHERE ID = 3 
    UNION ALL 
    SELECT j.ID 'ID', 
      j.pid 'ParentId', 
      Level + 1, 
      j.Name 'Name' 
    FROM tblPagePath as j 
    INNER JOIN Parents AS jpt ON j.ID = jpt.pid 
) 
SELECT * 
FROM Parents 
; 

---

関連する問題