繁体   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