2017-04-25 4 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에 대한 TYPE을 사용할 수

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') 
,536,
+0

감사합니다. D. 이제 원하는 출력을 얻을 수 있습니다. –

+0

그런 다음 승인 된 답변으로 표시합니다. .... .... – TriV

0

우리가 우리 자신의 질문에 대답 할 수 있는지 여부는 확실하지 않습니다. Me & 동료 중 한 명이이 쿼리에 대한 다른 해결책을 찾았지만 자동 모드를 사용하고 있습니다.

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