2017-04-25 8 views
3

私はPATHモードのT-SQL FOR XMLを使用して、グループごとのフィールドに基づいて階層を作成しています。 以下は私のクエリと出力です。 Plsはあなたの貴重な提案を私に助けます。ありがとうございました。良い一日!!!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

あなたは、ネストされた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') 
ため TYPEを使用することができます
+0

ありがとうございました。今、私は希望の出力を得ることができます。 –

+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 
関連する問題