簡體   English   中英

SQL(SQL Server 2008)分層查詢和子樹查詢以獲取特定結果

[英]SQL (SQL Server 2008) hierarchical query and subtree query for specific results

我有一個關於編寫查詢的查詢的問題,該查詢是從分層查詢返回的結果子樹。

本質上,我必須從具有組織和子組織的表中提取數據。 組織是分層的,並使用數字序列作為標識符。 可以將名稱分配給多個組織。 我已經編寫並運行了該標准的部分(如下)。

但是,現在,我必須為即將到來的網頁返回子樹的結果(此段現在要寫)。 它將返回搜索功能的結果,用戶可以在其中輸入名稱,並可以查看與該名稱相關聯的所有組織機構代碼。 我不知道如何使用分層查詢來完成此操作,我們將不勝感激。

這是分層查詢的工作代碼:

WITH OrgCode_hierarchy (ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL) AS
(

      SELECT o_base.ParentOrgCodeID, o_base.OrgCodeID, o_base.OrgCode, o_base.OrgName, cast('::' + o_base.OrgCode  + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, 0 AS LEVEL
      FROM L_OrgCode o_base
      WHERE o_base.OrgCode is not null


      UNION all

      SELECT o_child.ParentOrgCodeID, o_child.OrgCodeID, o_child.OrgCode, o_child.OrgName,  cast (ho.OrgCodeSortOrder + CASE WHEN left(o_child.OrgCode, 2) = '::' THEN '::' ELSE '' END  + o_child.OrgCode + '::' AS VARCHAR (200)) AS OrgCodeSortOrder, LEVEL + 1 AS LEVEL
      FROM L_OrgCode o_child
      inner join OrgCode_hierarchy ho on o_child.ParentOrgCodeID = ho.OrgCodeID
)     

SELECT DISTINCT ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL
FROM OrgCode_hierarchy 
ORDER BY 1

以下是該查詢返回的結果的示例:

分層查詢結果樣本

再次感謝!

您不能只是在CTE中添加用戶ID,還是在最終查詢中添加where子句? 即:

SELECT DISTINCT ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL
FROM OrgCode_hierarchy 
**where [UserId] = '[UserId]'**
ORDER BY 1

公用表表達式(CTE)提供了能夠引用自身的顯着優勢,從而創建了遞歸CTE。 遞歸CTE是重復執行初始CTE以返回數據子集直到獲得完整結果集的一種。

有關更多詳細信息: http : //rajeshprajapati.blogspot.in/2012/04/recursive-query-for-parent-id.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM