简体   繁体   English

SQL Server-用于XML路径(嵌套元素,多个记录)

[英]SQL Server - For XML Path (nested elements, multiple records)

Struggling to write query which can generate nested elements in XML. 努力编写可以在XML中生成嵌套元素的查询。 Can anyone help 谁能帮忙

INPUT: 输入:

SELECT EmpName AS [Name],
       EmpSalary        AS [WageAmount],
    Add1    AS [Address1],
    Add2    AS [Address2],
    Mobile  AS [Mobile]
FROM   Employee
FOR XML PATH 

TABLE DATA (2 records exist for emoployee with different addresses) 表数据(针对具有不同地址的员工有2条记录)

Conrad Jagger   12345    London   UK    9191919191
Conrad Jagger   12345    Coventry UK    9191919191

Expected OUTPUT: (this has additional info as a nested element) 预期的输出:(此信息具有嵌套元素的附加信息)

    <Employee>
    <Name>Conrad</Name>
    <WageAmount>10000</WageAmount>
    <AdditionalInfo>
         <PersonAddress>
                  <Address1>London</Address1>
                  <Address2>UK</Address2>
                 <Mobile>919191919191</Mobile>
        </PersonAddress>
        <PersonAddress>
                  <Address1>Coventry</Address1>  --->Second address
                  <Address2>UK</Address2>
                <Mobile>919191919191</Mobile>
       </PersonAddress>
    </AdditionalInfo>
    </Employee>

This query works if you have single record coming, i don't know how to make this work for multiple records which im getting 如果您有一条记录,则此查询有效,我不知道如何针对多条记录使该记录有效

SELECT EmpName AS [Name],
       EmpSalary AS [WageAmount],
       Add1 AS [AdditionalInfo/Address1],
       Add2 AS [AdditionalInfo/Address2],
       Mobile AS [AdditionalInfo/Mobile]
FROM   Employee
FOR XML PATH ('Employee')

I hope there is an uniqe id column in the table. 我希望表中有一个唯一ID列。 As you haven't provided that column, i am joining on EmpName column for instance. 因为您没有提供该列,所以我例如加入了EmpName列。

Try this 尝试这个

SELECT EmpName AS [Name],
       EmpSalary AS [WageAmount],
       (SELECT 
       Add1 AS [PersonAddress/Address1],
       Add2 AS [PersonAddress/Address2],
       Mobile AS [PersonAddress/Mobile] FROM Employee B WHERE EmpName = A.EmpName
       FOR XML PATH('AdditionalInfo'),type)
FROM   Employee A
GROUP BY EmpName,EmpSalary
FOR XML PATH ('Employee') 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM