2013-12-18 31 views
0

我的數據即將以這種方式出現,這不是我所需的輸出。有關顯示分層數據的問題SQL Server 2005

JID   EntryDate RefundDate  Comments  Refund ActionBy  nLevel 
------  ------------ -------------- ---------- ------ --------  ------ 
41986  NULL   NULL   NULL   NULL  NULL   1 
41985  NULL   NULL   NULL   NULL  NULL   1 
NULL  2013-12-17 2013-12-24  Cancel  0  tridip  2 
NULL  2013-12-17 2013-12-25  done   1  tridip  2 
NULL  2013-12-17 2013-12-24  no   0  tridip  2 
NULL  2013-12-18 2013-12-25  testing  0  tridip  2 
NULL  2013-12-18 2013-12-25  done now  1  tridip  2 

,但我想有一個像像父子關係下方的輸出方式

JID   EntryDate RefundDate  Comments  Refund ActionBy  nLevel 
------  ------------ -------------- ---------- ------ --------  ------ 
41986  NULL   NULL   NULL   NULL  NULL   1 
NULL  2013-12-17 2013-12-24  no   0  tridip  2 
NULL  2013-12-17 2013-12-25  testing  0  tridip  2 
NULL  2013-12-17 2013-12-25  done now  1  tridip  2 

41985  NULL   NULL   NULL   NULL  NULL   1 
NULL  2013-12-18 2013-12-24  Cancel  0  tridip  2 
NULL  2013-12-18 2013-12-25  done   1  tridip  2 

我嘗試建立由CID但仍輸出不來了我想要的方式父子關係船。所以這裏是我發佈的具有輸出的sql。

;WITH Hierarchy AS 
(
    SELECT DISTINCT JID 
      ,CAST(NULL AS DATETIME) EntryDate 
      ,CAST(NULL AS DATETIME) RefundDate 
      ,CAST(NULL AS VARCHAR(MAX)) Comments 
      ,CAST(NULL AS BIT) Refund 
      ,CAST(NULL AS VARCHAR(30)) ActionBy 
      ,nLevel = 1 
      ,CAST(NULL AS INT) AS CID 
    FROM refundrequested 
    UNION ALL 
    SELECT CAST(NULL AS INT) JID 
      ,E.EntryDate 
      ,E.RefundDate 
      ,E.Comments 
      ,E.Refund 
      ,E.ActionBy 
      ,H.nLevel+1 
      ,H.JID AS CID 

    FROM refundrequested E 
    JOIN Hierarchy H ON E.JID = H.JID 

) 

SELECT * 
FROM Hierarchy 
ORDER BY JID DESC, nLevel 

回答

0

問題與您排序的方式有關。 NULLs最後以DESC排序。

您可以通過添加CID解決這個問題,首先排序列時JID是NULL:

;WITH Hierarchy AS 
(
    SELECT DISTINCT JID 
      ,CAST(NULL AS DATETIME) EntryDate 
      ,CAST(NULL AS DATETIME) RefundDate 
      ,CAST(NULL AS VARCHAR(MAX)) Comments 
      ,CAST(NULL AS BIT) Refund 
      ,CAST(NULL AS VARCHAR(30)) ActionBy 
      ,nLevel = 1 
      ,CAST(NULL AS INT) AS CID 
    FROM refundrequested 
    UNION ALL 
    SELECT CAST(NULL AS INT) JID 
      ,E.EntryDate 
      ,E.RefundDate 
      ,E.Comments 
      ,E.Refund 
      ,E.ActionBy 
      ,H.nLevel+1 
      ,H.JID AS CID 

    FROM refundrequested E 
    JOIN Hierarchy H ON E.JID = H.JID 

) 

SELECT * 
FROM Hierarchy 
ORDER BY COALESCE(JID, CID) DESC, nLevel