Явная группа XML по родительскому тегу не работает
Я требовал вывода, как показано ниже. Но когда я выполняю свой код, я не получаю продукт, сгруппированный должным образом по каждому родителю (это должно быть как в соответствии с кодом страны "США", у нас должно быть три продукта, а в разделе "FR" мы должны иметь два продукта).
<?xml version="1.0" encoding="utf-8"?>
<ComProducts>
<Country Code="US">
<Product>
<manufacturername>abc</manufacturername>
<productname>xyz road</productname>
<upc>RJ</upc>
</Product>
<Product>
<manufacturername>temp</manufacturername>
<productname>ppp road</productname>
<upc>RJ</upc>
</Product>
<Product>
<manufacturername>ccc</manufacturername>
<productname>oli Com</productname>
<upc>CL</upc>
</Product>
</Country>
<Country Code="FR">
<Product>
<manufacturername>xxx</manufacturername>
<productname>aaa road</productname>
<upc>NY</upc>
</Product>
<Product>
<manufacturername>eee</manufacturername>
<productname>olkiu road</productname>
<upc>CL</upc>
</Product>
</Country>
</ComProducts>
КОД:
DECLARE @Products TABLE
(
code VARCHAR(10),
manufacturername VARCHAR(50),
productname NVARCHAR(255),
upc VARCHAR(100)
)
INSERT INTO @Products
select 'en-us', 'abc', 'xyz road', 'RJ' union all
select 'en-us', 'temp', 'ppp road', 'RJ' union all
select 'fr-fr', 'xxx', 'aaa road', 'NY' union all
select 'en-us', 'ccc', 'oli Com', 'CL' union all
select 'fr-fr', 'eee', 'olkiu road', 'CL'
SELECT 1 AS Tag,
NULL AS Parent,
NULL AS 'ComProducts!1!',
NULL AS 'Country!2!locale',
NULL AS 'Products!3!',
NULL AS 'Products!3!manufacturerName!Element',
NULL AS 'Products!3!productName!cdata',
NULL AS 'Products!3!upc!Element'
UNION ALL
SELECT 2 AS Tag,
1 AS Parent,
NULL,
code,
NULL,
manufacturername,
productname,
upc
FROM @Products
UNION ALL
SELECT 3 AS Tag,
2 AS Parent,
NULL,
NULL,
NULL,
manufacturername,
productname,
upc
FROM @Products
FOR xml explicit
1 ответ
Я бы порекомендовал вам сделать это с for xml path
вместо for xml explicit
,
select P1.code as '@Code',
(
select P2.manufacturername,
P2.productname,
P2.upc
from @Products as P2
where P1.code = P2.code
for xml path('Product'), type
)
from @Products as P1
group by P1.code
for xml path('Country'), root('ComProducts');
Результат:
<ComProducts>
<Country Code="en-us">
<Product>
<manufacturername>abc</manufacturername>
<productname>xyz road</productname>
<upc>RJ</upc>
</Product>
<Product>
<manufacturername>temp</manufacturername>
<productname>ppp road</productname>
<upc>RJ</upc>
</Product>
<Product>
<manufacturername>ccc</manufacturername>
<productname>oli Com</productname>
<upc>CL</upc>
</Product>
</Country>
<Country Code="fr-fr">
<Product>
<manufacturername>xxx</manufacturername>
<productname>aaa road</productname>
<upc>NY</upc>
</Product>
<Product>
<manufacturername>eee</manufacturername>
<productname>olkiu road</productname>
<upc>CL</upc>
</Product>
</Country>
</ComProducts>