не получить соответствующую структуру - PullRequest
2 голосов
/ 03 февраля 2012

У меня есть такая процедура:

CREATE PROCEDURE [dbo].[Poll_EDI834_5010] 
AS 
BEGIN 
SELECT     Header.ST01,   
           Line.PER04__CommunicationNumber ,
           (SELECT  Member_Ref.REF01_ReferenceIdentificationQualifier
            FROM    EDI834_5010_2000_RefLoop Member_Ref  
            WHERE   Member_Ref.Id_Header = Header.BGN02__TransactionSetIdentifierCode             
            AND     Member_Ref.Id_Loop2000 = Line.Member_Id
            FOR XML AUTO, ELEMENTS, TYPE),    
           VLine.HD01_MaintenanceTypeCode,    
           (SELECT  ClaimDTP.DTP01__DateTimeQualifier 
            FROM    EDI834_5010_2300_DTPLoop ClaimDTP      
            WHERE   ClaimDTP.Id_Header = Header.BGN02__TransactionSetIdentifierCode      
            AND     ClaimDTP.Id_Loop2000 = Line.Member_Id      
            AND     ClaimDTP.Id_Loop2300 = VLine.Id_Claim      
            FOR XML AUTO, ELEMENTS, TYPE) 
FROM       EDI834_5010_Header   Header  
JOIN       EDI834_5010_2000     Line   ON Header.BGN02__TransactionSetIdentifierCode = Line.Header_Id 
JOIN       EDI834_5010_2300Loop VLine  ON Header.BGN02__TransactionSetIdentifierCode = VLine.Id_Header_Id andVLine.Id_Loop2000=Line.Member_Id
FOR XML AUTO, ELEMENTS 
END 
GO 

Я получаю данные, структурированные так:

<Header>
     <Line>
        <MemberRef> </MemberRef>
        <MemberRef> </MemberRef>
        <VLine>
           <Claim_DTP>  </Claim_DTP>
           <Claim_DTP>  </Claim_DTP>
         </VLine>
     </Line>
 </Header>

Моя проблема в том, что я хочу, чтобы данные выглядели так:

  <Header>
    <Line>
       <MemberRef> </MemberRef>
       <MemberRef> </MemberRef>
       <VLine>
         <Claim_DTP>  </Claim_DTP>
         <Claim_DTP>  </Claim_DTP>
      </VLine>
       <VLine>
         <Claim_DTP>  </Claim_DTP>
         <Claim_DTP>  </Claim_DTP>
       </VLine>
   </Line>
</Header>

Почему мои VLine узлы не повторяются? Но когда я удаляю подзапрос Member_Ref, я получаю соответствующую структуру. Но мне нужен этот подзапрос. Есть ли способ достичь этой структуры?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2012
        CREATE PROCEDURE [dbo].[Poll_EDI834_5010]  
AS  
BEGIN  
        SELECT     Header.ST01,               
        Line.PER04__CommunicationNumber ,            
        (SELECT  Member_Ref.REF01_ReferenceIdentificationQualifier             
         FROM    EDI834_5010_2000_RefLoop Member_Ref               
         WHERE   Member_Ref.Id_Header = Header.BGN02__TransactionSetIdentifierCode                         
         AND     Member_Ref.Id_Loop2000 = Line.Member_Id             
         FOR XML AUTO, ELEMENTS, TYPE),                
        (SELECT  VLine.HD01_MaintenanceTypeCode,                
        (SELECT  ClaimDTP.DTP01__DateTimeQualifier                  
          FROM    EDI834_5010_2300_DTPLoop ClaimDTP                       
          WHERE   ClaimDTP.Id_Header = Header.BGN02__TransactionSetIdentifierCode                       
          AND     ClaimDTP.Id_Loop2000 = Line.Member_Id                 
          AND     ClaimDTP.Id_Loop2300 = VLine.Id_Claim                 
          FOR XML AUTO, ELEMENTS, TYPE) 
          FROM EDI834_5010_2300Loop VLine  
          Where  Header.BGN02__TransactionSetIdentifierCode = VLine.Id_Header_Id andVLine.Id_Loop2000=Line.Member_Id 

          FOR XML AUTO, ELEMENTS, TYPE) 
FROM       EDI834_5010_Header   Header 
JOIN       EDI834_5010_2000     Line   ON Header.BGN02__TransactionSetIdentifierCode = Line.Header_Id  
   FOR XML AUTO, ELEMENTS  
END  
GO  
1 голос
/ 03 февраля 2012

не уверен в этом ...

CREATE PROCEDURE [dbo].[Poll_EDI834_5010] 
AS 
BEGIN 
SELECT     Header.ST01,   
           Line.PER04__CommunicationNumber ,
           (SELECT  Member_Ref.REF01_ReferenceIdentificationQualifier
            FROM    EDI834_5010_2000_RefLoop Member_Ref  
            WHERE   Member_Ref.Id_Header = Header.BGN02__TransactionSetIdentifierCode             
            AND     Member_Ref.Id_Loop2000 = Line.Member_Id
            FOR XML AUTO, ELEMENTS, TYPE),    
           (SELECT  VLine.HD01_MaintenanceTypeCode,
               (SELECT  ClaimDTP.DTP01__DateTimeQualifier 
                FROM    EDI834_5010_2300_DTPLoop ClaimDTP      
                WHERE   ClaimDTP.Id_Header = Header.BGN02__TransactionSetIdentifierCode      
                AND     ClaimDTP.Id_Loop2000 = Line.Member_Id
                AND     ClaimDTP.Id_Loop2300 = VLine.Id_Claim
                FOR XML AUTO, ELEMENTS, TYPE)
            FOR XML AUTO, ELEMENTS, TYPE)
FROM       EDI834_5010_Header   Header
JOIN       EDI834_5010_2000     Line   ON Header.BGN02__TransactionSetIdentifierCode = Line.Header_Id 
JOIN       EDI834_5010_2300Loop VLine  ON Header.BGN02__TransactionSetIdentifierCode = VLine.Id_Header_Id andVLine.Id_Loop2000=Line.Member_Id
FOR XML AUTO, ELEMENTS 
END 
GO 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...