我正在尝试将 SQL 结果集(在存储过程中)拆分为多个列以进行 XML 格式设置。我有一个包含供应商编号和产品编号的结果集,如下所示:
SupplierID ProdCode
----------- ---------
Supp1 Prod1
Supp1 Prod2
Supp1 Prod3
Supp2 Prod2
Supp2 Prod3
Supp3 Prod2
等等
我需要拆分此结果集,以便每个供应商都有自己的数据集,然后可以将其拆分为自己的 XML 节点,如下所示:
<SUPPLIER>
<SUPPLIER_LINES>
<SUPPNO>Supp1</SUPPNO>
<PRODCODE>Prod1</WWPROD>
</SUPPLIER_LINES>
<SUPPLIER_LINES>
<SUPPNO>Supp1</SUPPNO>
<PRODCODE>Prod2</WWPROD>
</SUPPLIER_LINES>
<SUPPLIER_LINES>
<SUPPNO>Supp1</SUPPNO>
<PRODCODE>Prod3</WWPROD>
</SUPPLIER_LINES>
</SUPPLIER>
<SUPPLIER>
<SUPPLIER_LINES>
<SUPPNO>Supp2</SUPPNO>
<PRODCODE>Prod2</WWPROD>
</SUPPLIER_LINES>
<SUPPLIER_LINES>
<SUPPNO>Supp2</SUPPNO>
<PRODCODE>Prod3</WWPROD>
</SUPPLIER_LINES>
</SUPPLIER>
我将能够弄清楚 XML 格式,但在存储过程中分割结果以获得此结果时遇到困难:
SupplierID ProdCode
Supp1 Prod1
Supp1 Prod2
SupplierID ProdCode
Supp2 Prod2
Supp2 Prod3
最佳答案
您可以对 SUPPLIER
节点的 SupplierID
执行group by
,并使用相关子查询来获取 SUPPLIER_LINES
节点。
select (
select T2.SupplierID as SUPNO,
T2.ProdCode as PRODCODE
from YourTable as T2
where T1.SupplierID = T2.SupplierID
for xml path('SUPPLIER_LINES'), type
)
from YourTable as T1
group by SupplierID
for xml path('SUPPLIER')
您可能在自己的表中拥有供应商,因此如果您在主查询中使用该表,则无需执行分组依据
。
关于sql - 根据 XML 格式的列将一个结果集拆分为多个结果集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11902785/