2012-12-19 2 views
0

У меня есть таблица с именем Options. имеют три поля Caption, OptionID, ParentOptionID. содержит некоторые записи, как:
Как написать вложенный запрос

OptiondID  Caption  ParentOptionID 
     1  Entry   0 
     2  Sale   1 
     3  Sale Invoice 2 
---------------------------------------------- 
I want the result as : 

OptiondID  Caption      ParentOptionID 
     1  Entry       0 
     2  Entry - Sale     1 
     3  Entry - Sale - Sale Invoice 2 
----------------------------------------------- 
Option Caption of its parent option - added in current Options Caption, and it should be nested. 

Это вопрос, который я пробовал:

;with MyRelation as ( 

    -- Anchor member definition 
    select OID, Cast(Caption as Varchar(1000)) as Caption, POID, iid 
    from #tmpOptions as e 

    UNION ALL 

    -- Recursive member definition 
    select e.OID, Cast(e.Caption + '-' + r.Caption as Varchar(1000)) as Caption, e.POID, e.iid 
    from #tmpOptions as e join MyRelation R on e.POID = R.OID 

) 

-- Statement that executes the CTE 
select OID, Caption, POID, iid 
from MyRelation 
+0

я попытался КТР, но я я не буду в этом разбираться. –

+0

Вы бы добавили SQL, который вы пытались решить? –

+0

, с MyRelation в ( - Якорь определение члена выберите OID, Cast (Caption, как VARCHAR (1000)), как пояснением, POID, н.о.р. из #tmpOptions как электронная UNION ALL - Рекурсивные определения члена выберите е .OID, Cast (e.Caption + '-' + r.Caption как Varchar (1000)) в качестве Caption, e.POID, e.iid из #tmpOptions, так как e присоединяется к MyRelation R на e.POID = R.OID) - Инструкция, выполняющая CTE , выберите OID, Caption, POID, iid из MyRelation –

ответ

2

Не могли бы вы пытались с ниже запроса

;WITH MyRelation AS ( 
    SELECT OptiondID, convert(varchar(max), Caption) AS Caption, ParentOptionID 
    FROM Options 
    WHERE ParentOptionID = 0 
    UNION ALL 
    SELECT Options.OptiondID, MyRelation.Caption + ' - ' + Options.Caption, Options.ParentOptionID 
    FROM Options 
    INNER JOIN MyRelation ON Options.ParentOptionID = MyRelation.OptiondID 
    WHERE Options.ParentOptionID <> 0 
) 
SELECT * FROM MyRelation 
+0

Этот запрос работает точно. Большое вам спасибо господин Нареш. –

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

  • Нет связанных вопросов^_^