sql-server - T SQL For XML PATH Group By 作为属性或元素

标签 sql-server database tsql for-xml

我一直在使用 T-SQL FOR XML with PATH Mode 来创建基于字段分组的层次结构。 以下是我的查询和输出。请帮我提出宝贵的建议。谢谢你。再会!!!

select e.department_id AS [@DepartmentID],
d.DEPARTMENT_NAME AS [@DepartmentName],
e.EMPLOYEE_ID AS [EmployeeInfo/EmployeeID],
e.FIRST_NAME AS [EmployeeInfo/FirstName],
e.LAST_NAME AS [EmployeeInfo/LastName]
from employees e
JOIN departments d 
ON e.department_id = d.department_id
GROUP BY e.department_id,d.DEPARTMENT_NAME,
e.EMPLOYEE_ID,e.FIRST_NAME,e.LAST_NAME
FOR XML PATH ('Department'), ROOT ('Departments')

输出:

 <Departments>
  <Department DepartmentID="10">
    <EmployeeInfo>
      <EmployeeID>111</EmployeeID>
      <FirstName>John</FirstName>
      <LastName>Chen</LastName>
    </EmployeeInfo>
  </Department>
  <Department DepartmentID="10">
    <EmployeeInfo>
      <EmployeeID>201</EmployeeID>
      <FirstName>steven</FirstName>
      <LastName>Whalen</LastName>
    </EmployeeInfo>
  </Department>
  <Department DepartmentID="30">
    <EmployeeInfo>
      <EmployeeID>105</EmployeeID>
      <FirstName>ANIRUDH</FirstName>
      <LastName>RAMESH</LastName>
    </EmployeeInfo>
  </Department>
  <Department DepartmentID="30">
    <EmployeeInfo>
      <EmployeeID>115</EmployeeID>
      <FirstName>Den</FirstName>
      <LastName>Raphaely</LastName>
    </EmployeeInfo>
  </Department>
<Departments>

期望的输出是:

<Departments>
  <Department DepartmentID="10">
    <EmployeeInfo>
      <EmployeeID>111</EmployeeID>
      <FirstName>John</FirstName>
      <LastName>Chen</LastName>
    </EmployeeInfo>
    <EmployeeInfo>
      <EmployeeID>201</EmployeeID>
      <FirstName>steven</FirstName>
      <LastName>Whalen</LastName>
    </EmployeeInfo>
  </Department>
  <Department DepartmentID="30">
    <EmployeeInfo>
      <EmployeeID>105</EmployeeID>
      <FirstName>ANIRUDH</FirstName>
      <LastName>RAMESH</LastName>
    </EmployeeInfo>
    <EmployeeInfo>
      <EmployeeID>115</EmployeeID>
      <FirstName>Den</FirstName>
      <LastName>Raphaely</LastName>
    </EmployeeInfo>
  </Department>
<Departments>

最佳答案

你可以使用 TYPE对于嵌套的 xml

SELECT 
      d.department_id AS [@DepartmentID],
      d.DEPARTMENT_NAME AS [@DepartmentName], 
      (
         SELECT 
                e.EMPLOYEE_ID AS EmployeeID,
                e.FIRST_NAME AS [FirstName],
                e.LAST_NAME AS [LastName]  
         FROM employees e
         WHERE e.department_id = d.department_id
         FOR XML PATH ('EmployeeInfo'), TYPE
      )
FROM departments d 
FOR XML PATH ('Department'), ROOT ('Departments')

关于sql-server - T SQL For XML PATH Group By 作为属性或元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43604079/

相关文章:

sql-server - 减少 EF Core 字符串鉴别器列的大小以允许索引

java - NullPointerException - 从数据库中检索数据并将数据存储到数组时出现数据库锁定问题

php - 插入记录时出错无法添加或更新子行 : a foreign key constraint fails

sql - 我需要 T-SQL 将数据导出到 CSV(带标题)的最佳实践

sql-server - T-SQL - 是否有一种(免费)方法来比较两个表中的数据?

mysql - 如何将SQL Server程序转换为MySQL?

sql-server - 从 RedGate checkin 脚本重新创建数据库

sql-server - 那里有什么好的空间数据库教程吗?

php - 连接3张表是1张表性能MYSQL

sql - 在不知道父行是什么的情况下,删除父行时删除子行的最简单方法是什么?