作者cutekid (可爱小孩子)
看板Database
标题Re: [SQL ] 树状结构表 是否显示只写在根节点
时间Tue Mar 14 16:53:18 2017
参考:
https://technet.microsoft.com/zh-tw/library/ms186243(v=sql.105).aspx
解法如下:
-- 测资部份(红色部份稍改一下,就可以测你想要的状况了)
;with tb1 as (
select 1 as ID,null as PARENT_ID,cast(null as bit) as IS_SHOW
union all
select 2,1,null
union all
select 3,2,null
union all
select 4,3,null
union all
select 5,4,null
union all
select 6,5,null
union all
select 7,6,
0
union all
select 8,2,
1
union all
select 9,2,
0
),
-- CTE recursive 部份
tb2 as (
select ID,PARENT_ID from tb1 where is_show = 1
union all
select t1.ID,t1.PARENT_ID
from tb1 t1 inner join tb2 t2
on t1.ID = t2.PARENT_ID
)
-- 重覆 ID 只显示一次
select distinct ID from tb2
※ 引述《hirabbitt (兔子)》之铭言:
: 资料库名称:MS SQL
: 资料库版本:2012
: 内容/问题描述:
: 例如表长这样 画起来就会像这样(只要黄色部份
: ID PARENT_ID IS_SHOW root
: 1 null null └1
: 2 1 null └2
: 3 2 null ├3
: 4 3 null │└4
: 5 4 null │ └5
: 6 5 null │ └6
: 7 6 false │ └7
: 8 2 ture ├8
: 9 2 false └9
: 输出:1
: 2
: 8
: 例如表长这样 画起来就会像这样(只要黄色部份
: ID PARENT_ID IS_SHOW root
: 1 null null └1
: 2 1 null └2
: 3 2 null ├3
: 4 3 null │└4
: 5 4 null │ └5
: 6 5 null │ └6
: 7 6 true │ └7
: 8 2 ture ├8
: 9 2 false └9
: 输出:1
: 2
: 3
: 4
: 5
: 6
: 7
: 8
: is_show 表示:
: null = 非根节点
: false = 根节点 不show
: true = 根节点 要show
: 资料量大约在5000笔
: 层数分布在5~7层之间
: 有什麽方法可以快速找到需要显示的所有节点吗
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.233.210
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1489481604.A.0CE.html
1F:推 hirabbitt: 感谢!! 我来研究看看 03/14 16:54
2F:推 hirabbitt: 有用~ 问题解决了~ 03/14 17:38