asp.net - 使用 CTE SQL Server 2008 来重复记录

标签 asp.net sql sql-server-2008

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

我有一个名为COMMON.TASK_REL的表

enter image description here

我的第二个表称为Common。任务

enter image description here

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

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

但是我的结果返回重复的行:

enter image description here

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

最佳答案

我相信您的重复项来自您的根/ anchor 查询。您应该将以下内容添加到该查询中:

AND Task_Seq = 0

基本上,您只想将根设置为树的开头。 301|300 不应该被拾取,直到递归部分(union all 之后的部分)

如果这没有意义,那么我可以通过修改重新粘贴您的查询,但这对于小更改来说似乎没有必要。

关于asp.net - 使用 CTE SQL Server 2008 来重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9755931/

相关文章:

sql - 如果指定了 SELECT DISTINCT,则 ORDER BY 项必须出现在选择列表中

sql-server - 为什么 MyGeneration 存储过程生成器模板不起作用?

javascript - 如何获取asp.net中的行数并将asp.net行数传输到javascript?

asp.net - 来自 Controller 的数据在 View 中不可见 - ASP MVC

c# - HttpContext GetLocalResourceObject 和 GetGlobalResourceObject 之间的区别

sql - Postgres函数返回表不返回列中的数据

sql - SQL中连续重复值的计数

c# - 页面路由阻止 OnGet() 接收查询参数

sql-server-2008 - SQL SUM() 在一个月的报告中

sql - 更新表中的多条记录从另一个 SQL 2008 获取值