Flatten hierarchyid in SQL Server 2008

在SQL Server 2008中引入了hierarchyid來處理樹狀結構。下面簡單就以AdventureWorks(無hierarchyid)和AdventureWorks2008(有hierarchyid)裏的HumanResources.Employee爲例,來說明一下在新的hierarchyid中如何進行flat化的dimension抽取。

AdventureWorks是微軟爲SQL Server提供的數據庫虛擬案例。

 

AdventureWorks中所要的結果集代碼如下:

 

select L4.NationalIDNumber, L4.Title, L3.NationalIDNumber, L3.Title, L2.NationalIDNumber, L2.Title, L1.NationalIDNumber, L1.Title, L0.NationalIDNumber, L0.Title


from HumanResources.Employee L4, HumanResources.Employee L3, HumanResources.Employee L2, HumanResources.Employee L1, HumanResources.Employee L0

where L4.ManagerID = L3.EmployeeID and L3.ManagerID = L2.EmployeeID and L2.ManagerID = L1.EmployeeID and L1.ManagerID = L0.EmployeeID

 

 

AdventureWorks2008中的代碼如下:

 

select L4.NationalIDNumber, L4.JobTitle, L3.NationalIDNumber, L3.JobTitle, L2.NationalIDNumber, L2.JobTitle, L1.NationalIDNumber, L1.JobTitle, L0.NationalIDNumber, L0.JobTitle

from HumanResources.Employee L0, HumanResources.Employee L1, HumanResources.Employee L2, HumanResources.Employee L3, HumanResources.Employee L4

where L4.OrganizationNode.GetAncestor(1)=L3.OrganizationNode and L3.OrganizationNode.GetAncestor(1)=L2.OrganizationNode and L2.OrganizationNode.GetAncestor(1)=L1.OrganizationNode and L1.OrganizationNode.GetAncestor(1)=L0.OrganizationNode

 

 

GetAncestor()是HierarchyNode類裏其中的一個方法。更多hierarchyid數據類型方法引用可參考以下鏈接:

http://technet.microsoft.com/zh-cn/library/bb677193.aspx

發佈了40 篇原創文章 · 獲贊 11 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章