Asp.net 使用CTEs SQL Server 2008复制记录

Asp.net 使用CTEs SQL Server 2008复制记录,asp.net,sql,sql-server-2008,Asp.net,Sql,Sql Server 2008,我需要管理存储在数据库中的层次结构数据。但我现在有个问题。请看我的例子 我有一张名为COMMON.TASK_REL的表 我的第二张桌子叫Common。任务 我想需要对任务进行排序并返回如下结果: Task Name || Task_Seq Item1 1 ..Item1.2 1 ...Item1.2.1 1 ..Item1.1 2 这是我的问题 --Common ta

我需要管理存储在数据库中的层次结构数据。但我现在有个问题。请看我的例子

我有一张名为COMMON.TASK_REL的表

我的第二张桌子叫Common。任务

我想需要对任务进行排序并返回如下结果:

Task Name        || Task_Seq
    Item1               1
    ..Item1.2           1
    ...Item1.2.1        1
    ..Item1.1           2
这是我的问题

--Common task SQL modify --
WITH ctLevel
AS
(
SELECT
   C_TASK_ID AS Child
  ,P_Task_ID AS Parent
  ,common_task.TASK_SEQ AS taskOrder
  ,1 AS [Level]
  ,CAST(C_TASK_ID AS VARCHAR(MAX)) AS [Order]
  ,CAST (Replicate('.', 1) + common_task.TASK_NAME AS VARCHAR(25)) AS [Task_Name]
FROM   
       [COMMON.TASK_REL] as common_task_rel, 
       [COMMON.TASK] as common_task
WHERE common_task_rel.C_TASK_ID = common_task.TASK_ID
    and common_task.[TASK_TYPE] = 'B' AND common_task.[MODULE_CODE] = 'LWRPT' 
    AND common_task.[STATUS] <> 'D'
UNION ALL

SELECT 
   C_TASK_ID AS Child
  ,P_Task_ID AS Parent
  ,common_task.TASK_SEQ AS taskOrder
  ,[Level] + 1 AS [Level]
  ,[Order] + '.' + CAST(C_TASK_ID AS VARCHAR(MAX)) AS [Order]
  ,CAST (Replicate('.', [Level] + 1) + common_task.TASK_NAME AS VARCHAR(25)) AS [Task_Name]
FROM   [COMMON.TASK_REL] as common_task_rel
    INNER JOIN ctLevel
       ON ( P_Task_ID = Child ) , [COMMON.TASK] as common_task
WHERE common_task_rel.C_TASK_ID = common_task.TASK_ID
    and common_task.[TASK_TYPE] = 'B' AND common_task.[MODULE_CODE] = 'LWRPT'
    AND common_task.[STATUS] <> 'D'
)

-- Viewing Data
SELECT Child ,Parent ,taskOrder,Level,[Order],Task_Name
FROM   ctLevel  
GROUP BY Child ,Parent ,taskOrder,Level,[Order],Task_Name
order by [Order];
GO
但我的结果返回重复的行:


有人能帮我纠正我的疑问吗?谢谢

我相信您的副本来自您的根/锚查询。应将以下内容添加到该查询中:

AND Task_Seq = 0
基本上,您只希望将根设置为树的开头。301 | 300不应拾取,直到递归段将零件全部合并

若这并没有意义,那个么我可以通过修改来重新存储您的查询,但这对于一个小的更改来说似乎是不必要的