2012-03-19 37 views
-1

排序分级表我正陷在使用公共表expression.Please看到我的样品 我有一个表称为COMMON.TASK_REL使用公共表表达式

enter image description here

排序分级表

我的第二张表叫做常见。任务 enter image description here

我的SQL查询

   WITH ctLevel 
       AS 
       (
        SELECT 
         C_TASK_ID                AS Child 
         ,P_Task_ID                AS Parent 
         ,common_task. TASK_SEQ            AS taskSeq 
         ,1                  AS [Level] 
         ,CAST(C_TASK_ID AS VARCHAR(MAX))          AS [Order] 
         ,CAST (Replicate(' ', 1) + common_task.TASK_NAME AS VARCHAR(MAX))  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' 
         and  common_task_rel.P_TASK_ID is null 




        UNION ALL 

        SELECT 
         C_TASK_ID                 AS Child 
         ,P_Task_ID                 AS Parent 
         ,common_task. TASK_SEQ             AS taskSeq 
         ,[Level] + 1                AS [Level] 
         ,[Order] + '.' + CAST(C_TASK_ID AS VARCHAR(MAX))       AS [Order] 
         ,CAST (Replicate(' ', [Level] + 1) + common_task.TASK_NAME AS VARCHAR(MAX)) 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' 
        ) 


        SELECT [Parent] ,[Child],taskSeq, Level,[Order],[Task_Name]as taskName 
        FROM ctLevel 
        order by [Order] 

我的SQL结果

enter image description here

在这里,我有一个问题。我该如何排序的taskseq成为结果类似下面

taskName  taskSeq 
-Item1   1 
--Item 1.1  1 
--Item 1.2  2 
--Item 1.3  3 
-item 3   2 
-Item 2   3 
--Item 2.1  1 
--Item 2.2  2 
--Item 2.3 
---Item 2.3.1 

请帮助。十分紧急。在此先感谢

+0

为什么你不只是一个静态的'Sort'列,并用它为您的自定义排序? – 2012-03-19 08:49:00

回答

1

在我看来,你想按taskSeq命令,但儿童有不同的价值观。解决这个问题的方法是引入另一场将从父值复制到其所有的孩子:

WITH ctLevel 
AS 
(
SELECT 
    C_TASK_ID                AS Child 
    ,P_Task_ID                AS Parent 
    ,common_task.TASK_SEQ             AS taskSeq 
    ,common_task.TASK_SEQ AS sorting_field 
    ,1                  AS [Level] 
    ,CAST(C_TASK_ID AS VARCHAR(MAX))          AS [Order] 
    ,CAST (Replicate(' ', 1) + common_task.TASK_NAME AS VARCHAR(MAX))  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' 
    and common_task_rel.P_TASK_ID is null 

UNION ALL 

SELECT 
    C_TASK_ID                 AS Child 
    ,P_Task_ID                 AS Parent 
    ,common_task. TASK_SEQ             AS taskSeq 
    ,ctLevel.sorting_field 
    ,[Level] + 1                AS [Level] 
    ,[Order] + '.' + CAST(C_TASK_ID AS VARCHAR(MAX))       AS [Order] 
    ,CAST (Replicate(' ', [Level] + 1) + common_task.TASK_NAME AS VARCHAR(MAX)) 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' 
) 

SELECT [Parent] ,[Child],taskSeq, Level,[Order],[Task_Name]as taskName 
FROM ctLevel 
order by sorting_field, [Order] 
+0

华友世纪。谢谢 :) – user998405 2012-03-20 18:24:46