2013-12-22 52 views
0

我有一張表,它遵循以下結構;單表上的遞歸查詢

Tablename: Codes 
ID int 
CodeID int 
ParentID int 
Name varchar 

是否有可能在MSSQL 2012中執行查詢在CTE中遞歸選擇所有值?

如果CodeID = NULL,那麼這是代碼的根。當你走下一步時,ParentID將與CodeID相關聯。

e.g SELECT名字從代碼其中id = NULL和PARENTID = X

在先進的感謝。

回答

1

你是什麼意思選擇遞歸的所有值?以下選擇所有值:

select * 
from codes; 

讓我假設您需要所有祖先的所有代碼層次結構。你可以用遞歸CTE來做到這一點:

with cte as (
     select c.id, c.codeid, c.parentid, c.name, 
      cast(c.id as varchar(255)) as ids 
     from Codes c 
     union all 
     select cte.id, cte.codeid, c.parentid, cte.name, 
      cast(cte.ids +','+cast(c.parentid as varchar(255)) as varchar(255)) 
     from cte join 
      Codes c 
      on cte.parentid = c.id and c.parentid is not null and 
       ','+cast(cte.parentid as varchar(255))+',' not like '%,'+ids+'%,' 
    ) 
select * 
from cte; 

你可以過濾這個特定的父母id來獲取它下面的所有節點。

Here是一個顯示工作版本的SQL小工具。