作者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://www.ptt.cc/bbs/Database/M.1489481604.A.0CE.html
推 hirabbitt: 感謝!! 我來研究看看 03/14 16:54
推 hirabbitt: 有用~ 問題解決了~ 03/14 17:38