这里和那里有些小改动,但与Jayvee所写的几乎相同。我应用了LEFT JOIN以确保满足OUTER APPLY逻辑
DECLARE @xml xml = '<Root>
<People>
<Person id="1">Frank</Person>
<Person id="2">Joe</Person>
<Person id="3">Joe No Manager</Person>
</People>
<Positions>
<Position assignedToPerson="1">Engineer</Position>
<Position assignedToPerson="2">Manager</Position>
</Positions>
</Root>'
SELECT person.value('@id', 'INT') AS PersonID,
person.value('.', 'NVARCHAR(50)') AS NAME,
position.value('.', 'NVARCHAR(50)') AS positionTitle
FROM @xml.nodes('/Root/People/Person') People(person)
LEFT JOIN @xml.nodes('/Root/Positions/Position') Positions(position)
ON person.value('@id', 'INT') = position.value('@assignedToPerson', 'INT')