我有一个关于为分层查询返回的结果子树编写查询的问题。
基本上我必须从具有组织和子组织的表中提取数据。组织是分层的,并使用数字序列作为标识符。可以将名称分配给多个组织。我已经编写了这个标准的段并且正在编写和工作(在下面)。
但是,现在,我必须返回子树的结果(此段是现在要写的内容),用于即将发布的网页。它将返回搜索功能的结果,其中用户输入名称并可以查看与该名称相关联的所有组织代码。我对如何使用分层查询执行此操作感到茫然,并且非常感谢任何帮助。
以下是分层查询的工作代码:
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
以下是该查询返回结果的示例:
再次感谢!
答案 0 :(得分:1)
难道你不能只在CTE中添加用户的Id,只需在最终查询中添加where子句吗?即:
SELECT DISTINCT ParentOrgCodeID, OrgCodeID, OrgCode, OrgName, OrgCodeSortOrder, LEVEL FROM OrgCode_hierarchy **where [UserId] = '[UserId]'** ORDER BY 1
答案 1 :(得分:-1)
公用表表达式(CTE)提供了能够引用自身的显着优势,从而创建递归CTE。递归CTE是一种重复执行初始CTE以返回数据子集直到获得完整结果集的CTE。
更多详情: http://rajeshprajapati.blogspot.in/2012/04/recursive-query-for-parent-id.html