2014-06-19 2 views
2

첫 번째 XML 파일을 두 번째 형식으로 전송하려는 경우 기본적으로 주된 차이점은 masterBatchNo의 반복 값을 원하지 않는다는 것입니다. 대신 masterBatchNo의 유일한 값을 원하고 다른 속성 하위 노드를 만듭니다. 이 일을하는 방법이 있습니까?SQL 열을 다른 열의 XML 노드로 만들기

+0

별칭을 사용하지 않을 때 열이 나오는 테이블을 알아내는 것은 어렵습니다. 테이블 구조를 게시 할 수 있다면 도움이 될 것입니다. –

+0

그들은 본질적으로 하나의 테이블에서오고 있으며, INNER JOIN은 masterBatchNo가 서로 일치 할 때 두 테이블을 조인합니다. –

+0

어떤 테이블에 기본 키가 masterBatchNo입니까? '무대'는 어떤 테이블에서 왔는가? –

답변

1

for xml path 대신 XML을 구성하는 방법을 제어 할 수 있습니다. 파생 테이블에서 PV_Batch을 사용하여 중첩 된 XML을 만들고 @을 사용하여 특성을 만듭니다.

PV_MasterBatch에서 PV_Batch에서 생성 된 하위 노드가없는 행을 제외하는 데는 exists 절이 있습니다.

select MB.masterBatchNo as [@masterBatchNo], 
     (
     select B.processStage as [@processStage], 
       B.processBatchNo as [@processBatchNo] 
     from PV_Batch as B 
     where B.masterBatchNo = MB.masterBatchNo and 
      B.projectid = @varProjectID 
     for xml path('tempTable'), type 
     ) 
from PV_MasterBatch as MB 
where MB.stage = @varStage and 
     exists (
      select * 
      from PV_Batch as B 
      where B.masterBatchNo = MB.masterBatchNo and 
        B.projectid = @varProjectID 
      ) 
for xml path('PV_Batch'), root('Root') 
관련 문제