2012-03-19 36 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