2017-04-25 190 views
3

我一直在使用PATH模式處理T-SQL FOR XML以基於group by字段創建Hierarchy。 以下是我的查詢和輸出。請幫助我提供寶貴的建議。謝謝。美好的一天!!!T SQL對於XML PATH組通過作爲屬性或元素

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> 

回答

2

你可以使用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') 
+0

謝謝你:D。現在我能夠獲得所需的輸出。 –

+0

然後將其標記爲接受答案:) .... – TriV

0

不知道,我們是否可以回答我們自己的問題。 Me &我的一位同事已經爲這個查詢找到了另一個解決方案,但是使用AUTO模式。

select d.DEPARTMENT_ID as [DepartmentID],e.EMPLOYEE_ID as 
[EmployeeID],e.first_name as [EmployeeName],e.SALARY as [Salary] 
from [departments] d 
inner join [employees] e 
on e.DEPARTMENT_ID = d.DEPARTMENT_ID 
order by 1,4 
for xml AUTO, Root ('Employees'), ELEMENTS 
相關問題