powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбор значения из XML по xpath
5 сообщений из 5, страница 1 из 1
Выбор значения из XML по xpath
    #39860043
unno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как для каждого ID выбрать только те P2, где P1=1 ?
Структура данных такая
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare @xml xml='
  <tag1 id="1">
    <tag2 p1="1" p2="11"/>
    <tag2 p1="2" p2="22"/>
  </tag1>
  <tag1 id="2">
    <tag2 p1="3" p2="33"/>
    <tag2 p1="1" p2="12"/>
  </tag1>'

SELECT
  id=c.value('@id[1]','VARCHAR(2)'),  
  p2=c.value('./tag2[1]/@p2','VARCHAR(2)')
  -- так не работает 
  -- p2=c.value('./tag2[@p1="1"]/@p2','VARCHAR(2)')
FROM @xml.nodes('/tag1') t(c)
...
Рейтинг: 0 / 0
Выбор значения из XML по xpath
    #39860047
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
select
 a.n.value('@id', 'int'),
 b.n.value('@p2', 'int')
from
 @xml.nodes('/tag1') a(n) cross apply
 a.n.nodes('tag2[@p1 = "1"]') b(n);
...
Рейтинг: 0 / 0
Выбор значения из XML по xpath
    #39860049
unno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, работает!
Т.е. фильтр для уникальности value надо накладывать на уровне nodes и без cross apply никак не обойтись?
...
Рейтинг: 0 / 0
Выбор значения из XML по xpath
    #39860051
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
unnoбез cross apply никак не обойтись?Можно и без
Код: sql
1.
2.
3.
4.
5.
select
 a.n.value('../@id', 'int'),
 a.n.value('@p2', 'int')
from
 @xml.nodes('/tag1/tag2[@p1 = "1"]') a(n);
...
Рейтинг: 0 / 0
Выбор значения из XML по xpath
    #39860060
unno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вот такой вариант нашел
Код: sql
1.
2.
3.
4.
SELECT
  id=c.value('@id[1]','int'),  
  p2=c.value('(tag2[@p1="1"]/@p2)[1]','int')
FROM @xml.nodes('/tag1') t(c)


Спасибо большое за помощь, сильно помогли в понимании процесса
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Выбор значения из XML по xpath
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]