我有以下格式的表数据:
category productkey productcode productname
membership 1 055385 Professional
membership 2 055575 Student
membership 3 055370 Retired
event 4 P055391 Annual Conference
event 5 PM2018 Monthly Meeting
Im希望实现以下XML格式,请注意数据中的第二级XML节点:
<Products>
<Membership>
<Product>
<productcode>055385</productcode>
<productname>Professional<productname>
</Product>
<Product>
<productcode>055575</productcode>
<productname>Student<productname>
</Product>
<Product>
<productcode>055370</productcode>
<productname>Retired<productname>
</Product>
</Membership>
<Event>
<Product>
<P055391>055385</productcode>
<productname>Professional<productname>
</Product>
<Product>
<productcode>Annual Conference</productcode>
<productname>Monthly Meeting<productname>
</Product>
</Event>
我已经根据此SQL接近所需的格式:
select CAST('<' + replace(b.category,' ','') + '>' +
CAST( (select productcode,
productname
from @table a
where a.productkey=b.productkey
for xml path ('Products'), TYPE) as varchar(max))
+ '</' + replace(b.category,' ','') +'>' as xml)
from @table b
for xml path (''), ROOT('Product')
当前,此SQL返回每个产品上的“类别”节点,而不是将产品分组到“类别”节点下:
<Products>
<Membership>
<Product>
<productcode>055385</productcode>
<productname>Professional<productname>
</Product>
</Membership>
<Membership>
<Product>
<productcode>055575</productcode>
<productname>Student<productname>
</Product>
</Membership>
<Membership>
<Product>
<productcode>055370</productcode>
<productname>Retired<productname>
</Product>
</Membership>
任何帮助,将不胜感激。
谢谢
最佳答案
我认为这可能是您需要的:
select CAST('<'+ a.Category +'>'
+ CAST((SELECT
ProductCode, ProductName
FROM Thing b
WHERE b.Category = a.Category
FOR XML path('Product'), type) as VARCHAR(MAX))
+ '</' + a.Category + '>' AS XML)
from Thing a
GROUP BY a.Category
ORDER BY a.Category DESC
for xml path(''), root('Products')
请注意,
Thing
是表名,您可能需要重新添加REPLACE
语法。我只是按提供的架构和数据进行操作。
关于sql - SQL for XML Path使用节点名称和嵌套的数据值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636480/