2012-03-19 15 views
-1

を使用して階層テーブルを並べ替える私はテーブルがCOMMON.TASK_REL共通テーブル式

enter image description here

と呼ばれてい私のサンプル を参照してくださいexpression.Please共通テーブルを使用して階層テーブルをソートするに立ち往生しています

私の2番目のテーブルコモンと呼ばれる。タスクここ 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

は、私は質問を得ました。どのように私は

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 

以下助けてくださいのような結果になることを何か taskseqを並べ替えることができます。非常に緊急。事前に感謝します

+0

:これを解決する方法は、そのすべての子に親から値を複製する別のフィールドを導入することですか? –

答えて

1

あなたはtaskSeqで注文したいと思いますが、子供は異なる値を持っています。あなただけの静的 `Sort`列を持っており、カスタムの並べ替えのためにそれを使用していないのはなぜ

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

Hurray。ありがとう:) – user998405

関連する問題