2017-04-25 2 views
3

Ich habe auf der T-SQL FOR XML mit PATH-Modus arbeitet eine Hierarchie zu erstellen, basierend auf dem durch Feld. Unten ist meine Abfrage und Ausgabe. Bitte helfen Sie mir mit Ihren wertvollen Anregungen. Vielen Dank. Schönen Tag!!!T SQL Für XML PATH Gruppierung als Attribut oder Element

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') 

Ausgang:

<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> 

gewünschte Ausgabe ist:

<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> 

Antwort

2

Sie TYPE für verschachtelten xml verwenden könnten

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

Danke: D. Jetzt kann ich die gewünschte Ausgabe bekommen. –

+0

Dann markieren Sie es als angenommene Antwort :) .... – TriV

0

Nicht sicher, ob wir unsere eigene Frage beantworten können. Me & einer meiner Kollegen eine andere Lösung für diese Frage gefunden hat, aber mit AUTO-Modus.

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