【问题标题】:T-SQL Query with XML PATH produces repeating parent nodes带有 XML PATH 的 T-SQL 查询产生重复的父节点
【发布时间】:2020-07-24 22:17:35
【问题描述】:

假设我有 2 个表,分别称为 tb1 和 tb2

create table tb1
(
  id int

);
insert into tb1 values(100),(200);

create table tb2
(
  id int,
  col2 int
);

insert into tb2 values(100,1),(100,2),(100,3),(200,3),(200,4);

这是我的 SQL 代码:

SELECT 
  t.id as [@healthAccountRecord]
,(
  SELECT t2.col2 as [DiagnosisCode/@code]     
  FROM dbo.tb2 as t2 
  WHERE t.id = t2.id    
  FOR XML PATH('DiagnosisCodes'), TYPE
)
 FROM dbo.tb1 as t
 FOR XML PATH('Account'), ROOT ('Accounts')

这是我的输出:

<Accounts><Account healthAccountRecord="100"><DiagnosisCodes><DiagnosisCode code="1"/> 
</DiagnosisCodes><DiagnosisCodes><DiagnosisCode code="2"/></DiagnosisCodes><DiagnosisCodes> 
<DiagnosisCode code="3"/></DiagnosisCodes></Account><Account healthAccountRecord="200"> 
<DiagnosisCodes><DiagnosisCode code="3"/></DiagnosisCodes><DiagnosisCodes><DiagnosisCode code="4"/> 
</DiagnosisCodes></Account></Accounts>

这是我想要的样子:

> "    <Accounts>
>     <Account healthAccountRecord="100"
>       <DiagnosisCodes>
>         <DiagnosisCode code="1" />
>         <DiagnosisCode code="2" />    
>         <DiagnosisCode code="3" />   
>      </DiagnosisCodes>    </Account>
>     <Account healthAccountRecord="200"
>       <DiagnosisCodes>
>         <DiagnosisCode code="3" />
>         <DiagnosisCode code="4" />     
>       </DiagnosisCodes>   <Accounts>
> 
> "

http://sqlfiddle.com/#!18/ab448/1

我该如何做到这一点?

【问题讨论】:

    标签: sql-server xml tsql xquery


    【解决方案1】:

    你快到了。

    SQL

    DECLARE @tb1 TABLE (id int);
    insert into @tb1 values(100),(200);
    
    DECLARE @tb2 table (id int, col2 int);
    insert into @tb2 values(100,1),(100,2),(100,3),(200,3),(200,4);
    
    SELECT 
      t.id as [@healthAccountRecord]
    ,(
      SELECT t2.col2 as [DiagnosisCode/@code]     
      FROM @tb2 as t2 
      WHERE t.id = t2.id    
      FOR XML PATH(''), TYPE, ROOT('DiagnosisCodes')
    )
     FROM @tb1 as t
     FOR XML PATH('Account'), ROOT ('Accounts')
    

    输出

    <Accounts>
      <Account healthAccountRecord="100">
        <DiagnosisCodes>
          <DiagnosisCode code="1" />
          <DiagnosisCode code="2" />
          <DiagnosisCode code="3" />
        </DiagnosisCodes>
      </Account>
      <Account healthAccountRecord="200">
        <DiagnosisCodes>
          <DiagnosisCode code="3" />
          <DiagnosisCode code="4" />
        </DiagnosisCodes>
      </Account>
    </Accounts>
    

    【讨论】:

    • @JeffWeinberg,很高兴听到建议的解决方案对您有用。请将其标记为已回答。您只需将答案标记为正确(绿色检查图像)。单击解决您的问题的答案左侧的绿色轮廓复选标记。这将答案标记为“已接受”
    • 完成..再次感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 2012-06-30
    • 2018-02-10
    • 2018-08-24
    • 2011-11-15
    相关资源
    最近更新 更多