sql - 没有获得适当的结构

标签 sql sql-server t-sql stored-procedures

我有这样的存储过程:

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 时,我得到了适当的结构。但我需要那个子查询。有什么办法可以实现这个结构吗?

最佳答案

        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  

关于sql - 没有获得适当的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122245/

相关文章:

sql - 获取 TSQL 中 WHERE 子句中每个值的 GROUP BY 的聚合结果

sql - 从同一个表更新一个表的列

sql - 在语句中返回 2 个计数结果

java - 可能无法清理 java.sql.ResultSet 、 Statement。清理资源的义务并未解除

mysql - 如何创建一个数据库来接收来自其他数据库的数据、手动输入和数据导出以创建 Web 仪表板?

sql - oracle中如何逐列比较两个表

c# - 您能否确认 NHibernate 术语中的术语 'Save' 代表 INSERT?

sql-server - 如何同时更新和同步数据库表?

sql - 识别 SQL Server 日期格式

sql - T-SQL 中的分区排名