2014-11-21 50 views
0

Get records containing all the child records in sql server检索亲子幼童,儿童recors在SQL查询

我得到一个输出(以上来自第二个答案说链路)如预期,但它在下面的格式显示结果。

<parent id> - <name> - <code> 
<child id> - <name> - <code> 
<child id> - <name> - <code> 
<child id> - <name> - <code> 
<child id> - <name> - <code> 
<sub child id> - <name> - <code> 
<sub child id> - <name> - <code> 
<sub child id> - <name> - <code> 

我想显示如下格式的结果。

<parent id> - <name> - <code> 
    <child id> - <name> - <code> 
    <child id> - <name> - <code> 
     <sub child id> - <name> - <code> 
     <sub child id> - <name> - <code> 
    <child id> - <name> - <code> 
    <child id> - <name> - <code> 
     <sub child id> - <label> - <code> 
    <child id> - <name> - <code> 
    <child id> - <name> - <code> 

我怎样才能制定上述的显示顺序?

+0

我的答案在下面有帮助吗?需要关于它背后的逻辑的额外信息? – 2014-11-21 15:04:41

回答

0

添加递归列CTE2,并在最后的select语句应该是这样的:

SELECT ID, 
    case when Recursion = 1 then Name 
    else replicate(' ', Recursion) + Name end as Name, 
    ParentID, 
    Path 
FROM CTE2 
WHERE RowNumber = 1; 

http://sqlfiddle.com/#!3/07faa/28

注:如果您在SQL Server Management Studio中运行代码,则空间会被看到(在SQL小提琴可能会有一个默认的修剪结果

+0

REPLICATE功能是您的问题的真正答案。这里的问题:http://msdn.microsoft.com/en-us/library/ms174383(v=sql.105).aspx – 2014-11-21 09:01:12