2013-12-18 1 views
0

내 데이터가 내 결과물이 아닌 방식으로 나타납니다.계층 적 데이터 표시와 관련된 문제 SQL 서버 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

정렬 방식에 문제가 있습니다. NULL은 DESC 정렬과 함께 마지막에옵니다.

;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 
: JID가 NULL 인 경우

당신은 CID를 추가하여 해결할 수는 첫 번째 열을 정렬하기