Вывести одноименные узлы из XML документа все вместе
Необходимо вывести все узлы Zakaz вместе
DECLARE @docxml xml;
SET @docxml='<Root>
<Shop>
<Items>
<Zakaz ZakazID="1" ZakazName="Tablets1" ZakazCategory="A">
<Price nom="RUB" pnom="650"/>
<Firms lang="русский">
<Firma>
Фирма1
</Firma>
<Firma>
Фирма2
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets1</Description>
</Features>
</Zakaz>
<Zakaz ZakazID="2" ZakazName="Tablets2" ZakazCategory="B">
<Price nom="DOL" pnom="150"/>
<Firms lang="английский">
<Firma>
Firma1
</Firma>
<Firma>
Firma1
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets2</Description>
</Features>
</Zakaz>
<Zakaz ZakazID="3" ZakazName="Tablets3" ZakazCategory="C">
<Price nom="RUB" pnom="300"/>
<Firms lang="русский">
<Firma>
Фирма3
</Firma>
<Firma>
Фирма4
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets3</Description>
</Features>
</Zakaz>
</Items>
</Shop>
<Shop>
<Items>
<Zakaz ZakazID="4" ZakazName="Tablets4" ZakazCategory="A">
<Price nom="RUB" pnom="1000"/>
<Firms lang="русский">
<Firma>
Фирма5
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets4</Description>
</Features>
</Zakaz>
</Items>
</Shop>
</Root>';
SELECT T.query('./Zakaz'),
C.query('./Zakaz')
FROM @docxml.nodes ('/Root/Shop[1]/Items') col(T)
CROSS APPLY @docxml.nodes ('/Root/Shop[2]/Items') tab(C)
У меня получается только в две ячейки. А как сделать в одну ячейку вывод? Может как-то через concat?
Должен быть вывод всех 4-х узлов Zakaz в одной ячейке как на скрине

и при открытии полученного документа должны выводиться 4 узла
<Zakaz ZakazID="1" .....>
.
.
.
</Zakaz>
<Zakaz ZakazID="2" .....>
.
.
.
</Zakaz>
<Zakaz ZakazID="3" .....>
.
.
.
</Zakaz>
<Zakaz ZakazID="4" .....>
.
.
.
</Zakaz>
Сделал по другому, но теперь две строки получается с одним и тем же ответом. Как сделать, чтобы была одна строка?
DECLARE @docxml xml;
SET @docxml='<Root>
<Shop>
<Items>
<Zakaz ZakazID="1" ZakazName="Tablets1" ZakazCategory="A">
<Price nom="RUB" pnom="650"/>
<Firms lang="русский">
<Firma>
Фирма1
</Firma>
<Firma>
Фирма2
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets1</Description>
</Features>
</Zakaz>
<Zakaz ZakazID="2" ZakazName="Tablets2" ZakazCategory="B">
<Price nom="DOL" pnom="150"/>
<Firms lang="английский">
<Firma>
Firma1
</Firma>
<Firma>
Firma1
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets2</Description>
</Features>
</Zakaz>
<Zakaz ZakazID="3" ZakazName="Tablets3" ZakazCategory="C">
<Price nom="RUB" pnom="300"/>
<Firms lang="русский">
<Firma>
Фирма3
</Firma>
<Firma>
Фирма4
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets3</Description>
</Features>
</Zakaz>
</Items>
</Shop>
<Shop>
<Items>
<Zakaz ZakazID="4" ZakazName="Tablets4" ZakazCategory="A">
<Price nom="RUB" pnom="1000"/>
<Firms lang="русский">
<Firma>
Фирма5
</Firma>
</Firms>
<Features>
<Description>Описание товара Tablets4</Description>
</Features>
</Zakaz>
</Items>
</Shop>
</Root>';
SELECT T.query('//Zakaz')
FROM @docxml.nodes ('/Root/Shop/Items') col(T);
Ответы (1 шт):
Автор решения: monah
→ Ссылка
Додумал сам. Немного nodes переделал и всё:
SELECT T.query('//Zakaz')
FROM @docxml.nodes ('./*') col(T);