2

我有一个关于为分层查询返回的结果子树编写查询的问题。

本质上,我必须从具有组织和子组织的表中提取数据。这些组织是分层的,并使用数字序列作为标识符。一个名称可以分配给多个组织。我已经有这个标准的部分编写和工作(它在下面)。

但是,现在我必须为即将到来的网页返回子树的结果(这个段就是现在要编写的内容)。它将返回搜索功能的结果,用户可以在其中输入名称,并可以查看与该名称关联的所有组织代码。我不知道如何使用分层查询来做到这一点,任何帮助都将不胜感激。

这是分层查询的工作代码:

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

以下是该查询返回的结果示例:

分层查询结果示例

再次感谢!

4

2 回答 2

1

您不能在 CTE 中添加用户的 Id,然后在最终查询中添加 where 子句吗?IE :

选择不同的 ParentOrgCodeID、OrgCodeID、OrgCode、OrgName、OrgCodeSortOrder、LEVEL
FROM OrgCode_hierarchy
**其中 [UserId] = '[UserId]'**
按 1 订购
于 2013-06-10T12:12:03.177 回答
-1

公共表表达式 (CTE) 提供了能够引用自身的显着优势,从而创建递归 CTE。递归 CTE 是一种重复执行初始 CTE 以返回数据子集直到获得完整结果集的 CTE。

更多详情: http ://rajeshprajapati.blogspot.in/2012/04/recursive-query-for-parent-id.html

于 2013-11-30T05:38:09.410 回答