Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка данных из XML  [new]
sniffysko
Member

Откуда:
Сообщений: 11
Имеется примерно такая структура XML:
Хранится она в таблице users поле data поле ID этой записи равно, скажем 1000
[id] = 1000
[name] = 'Иванов Иван'
[data] =
<jobs>
<job>
<year>2015</year>
<name>Хирург</name>
</job>
<job>
<year>2014</year>
<name>Санитар</name>
</job>
<job>
<year>2013</year>
<name>Студент</name>
</job>
</jobs>

Имеется ли возможность получить в результате запроса такую строку

[id] = 1000 [name] = 'Иванов Иван' jobs = '2015|Хирург||2014|Санитар||2013|Студент'

Т.е. сделать выборку и просуммировать в строку значения всех поднод с определенным именем определенного узла
data.value() возвращает значение только одной ноды а мне в выборке собрать все значение ноды, да еще и просуммировать.

Спасибо.
30 июн 15, 14:52    [17833117]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из XML  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
один из тысячи варинатов опис анных здесь
30 июн 15, 14:57    [17833143]     Ответить | Цитировать Сообщить модератору
 Re: Выборка данных из XML  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
declare @t table (id int, name varchar(50), jobs xml);

insert into @t
values
 (1000, 'Иванов Иван', '<jobs>
<job>
<year>2015</year>
<name>Хирург</name>
</job>
<job>
<year>2014</year>
<name>Санитар</name>
</job>
<job>
<year>2013</year>
<name>Студент</name>
</job>
</jobs>');

select
 id, name, jobs.query('for $n in (/jobs/job) return concat(($n/year/text())[1], "|", ($n/name/text())[1])').value('.', 'varchar(max)') as jobs
from
 @t;
30 июн 15, 15:31    [17833349]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить