SQL преобразует XML с теми же узлами в набор данных - PullRequest
2 голосов
/ 06 июня 2019

У меня есть столбец XML с такими же именами для узлов.

Так выглядит столбец XML.У него три Mapping узла.

<Mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Mapping>
    <ID>1</ID>
    <Name>John</Name>
  </Mapping>
  <Mapping>
    <ID>2</ID>
    <Name>Jill</Name>
  </Mapping>
  <Mapping>
    <ID>3</ID>
    <Name>Jason</Name>
  </Mapping>
</Mappings>

Ожидаемый набор результатов

   ID          Name
------------------------
   1           John
   2           Jill
   3           Jason

Это то, что я пытался сделать

select
    convert(varchar(50), ID.query('./text()')) as ID,
    convert(varchar(50), fName.query('./text()')) as [Name]
from [MyTable]
cross apply XMLCol.nodes('/Mappings/Mapping/ID') as map1(ID)
cross apply XMLCol.nodes('/Mappings/Mapping/Name') as map2(fName)

Это повторение ID 3раз со всеми 3 именами.

Я хочу повторить ID только один раз с соответствующим именем.

1 Ответ

3 голосов
/ 06 июня 2019

Вы были близки.Попробуйте

Пример

Select ID     = xAttr.value('ID[1]', 'int')
      ,[Name] = xAttr.value('Name[1]', 'varchar(100)')
 From  YourTable A
 Cross Apply XMLCol.nodes('/Mappings/Mapping') B(xAttr)

Возвращает

ID  Name
1   John
2   Jill
3   Jason
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...