當我在一家Oracle商店工作的時候,我認爲CONNECT_BY是理所當然的。現在我堅持使用SQL Server 2005,並有一些討厭的對象層次結構。具體而言,我們有一個自引用表,其中所有子記錄都有一個包含其父代的ID的列。目前,我們有一種將孩子映射到層次結構中的視圖,以及一個可以讓父母與子女聯繫起來的令人討厭的查詢。雖然這種方法有效,但它遠離優雅和污點。我只是好奇其他人如何從SQL Server 2005中檢索分層數據。SQL Server 2005中的分層查詢
11
A
回答
1
在SQL Server 2005中,您可以使用Common Table Expressions(CTE)。
25
這將創建典型的分層表並使用CTE選擇層次結構併爲每個項目創建路徑。
CREATE TABLE tblHierarchy (ID int, ParentID int NULL, Name varchar(128));
INSERT INTO tblHierarchy VALUES (1, NULL, '1');
INSERT INTO tblHierarchy VALUES (2, NULL, '2');
INSERT INTO tblHierarchy VALUES (3, NULL, '3');
INSERT INTO tblHierarchy VALUES (4, 1, '1.1');
INSERT INTO tblHierarchy VALUES (5, 1, '1.2');
INSERT INTO tblHierarchy VALUES (6, 4, '1.1.1');
WITH Parent AS
(
SELECT
ID,
ParentID,
Name AS Path
FROM
tblHierarchy
WHERE
ParentID IS NULL
UNION ALL
SELECT
TH.ID,
TH.ParentID,
CONVERT(varchar(128), Parent.Path + '/' + TH.Name) AS Path
FROM
tblHierarchy TH
INNER JOIN
Parent
ON
Parent.ID = TH.ParentID
)
SELECT * FROM Parent
OUTPUT:
ID ParentID Path
1 NULL 1
2 NULL 2
3 NULL 3
4 1 1/1.1
5 1 1/1.2
6 4 1/1.1/1.1.1
3
僅供參考。 SQL Server 2008支持新的數據類型Hierarchy ID。
2
+0
是的,嵌套集絕對是RDBMS中無限層次結構的一種方式。 Sitepoint的描述使其聽起來比實際更復雜一些,並且可以簡化實現,例如。通過'排序'和'下一個兄弟姐妹的排名'而不是'左'和'右'。 – bobince 2008-10-24 23:34:48
3
0
要首先遍歷層次的深度,然後下一個同級的水平,可用於 CTE:
declare @tempTable TABLE
(
ORGUID int,
ORGNAME nvarchar(100),
PARENTORGUID int,
ORGPATH nvarchar(max)
)
;WITH RECORG(ORGuid, ORGNAME, PARENTORGUID, ORGPATH)
as
(
select
org.UID,
org.Name,
org.ParentOrganizationUID,
dbo.fGetOrganizationBreadcrumbs(org.UID)
from Organization org
where org.UID =1
union all
select
orgRec.UID,
orgRec.Name,
orgRec.ParentOrganizationUID,
dbo.fGetOrganizationBreadcrumbs(orgRec.UID)
from Organization orgRec
inner join RECORG recOrg on orgRec.ParentOrganizationUID = recOrg.ORGuid
)
insert into @tempTable(ORGUID, ORGNAME, PARENTORGUID,ORGPATH)
select ORGUID, ORGNAME, PARENTORGUID,ORGPATH
from RECORG rec
select *
from @tempTable where ORGUID in(select MIN(tt.ORGUID)
from @tempTable tt
group by tt.PARENTORGUID)
相關問題
- 1. SQL Server 2005中的分層查詢
- 2. SQL Server 2008分層查詢
- 3. SQL Server 2005查詢
- 4. 查詢SQL Server 2005中
- 5. 查詢SQL Server 2005中
- 6. SQL查詢在SQL Server 2005
- 7. SQL Server 2005的XML查詢
- 8. SQL Server 2005子查詢
- 9. 在SQL Server DISTINCT 2005查詢
- 10. SQL Server 2005性能查詢
- 11. 樞軸查詢 - SQL Server 2005
- 12. SQL Server 2005查詢幫助
- 13. SQL Server 2005和.NET查詢
- 14. SQL Server 2005求和查詢
- 15. SQL Server 2005 - 優先查詢
- 16. SQL Server 2005,SELECT DISTINCT查詢
- 17. SQL Server 2005 XML查詢
- 18. 分層SQL查詢
- 19. UPDATE SET中的子查詢(sql server 2005)
- 20. 瞭解Sql Server 2005中的子查詢
- 21. 加快SQL Server 2005中的XML查詢
- 22. SQL Server 2005:EXEC中的子查詢?
- 23. SQL Server 2005中的XML查詢錯誤
- 24. SQL Server 2005中的不同查詢
- 25. SQL Server 2005中鍵入#查詢生產\
- 26. 錯誤查詢SQL Server 2005中
- 27. 加盟查詢SQL Server 2005中
- 28. SQL Server 2005中查詢SUBSTRING和PATINDEX
- 29. SQL Server 2005中選擇查詢
- 30. SQL Server 2005中查詢歷史
遞歸力與()你。哈哈哈。 – 2008-10-24 22:54:34
你能舉個例子嗎? – 2008-11-10 21:55:51