我正在尝试将SQL结果集(在Stored Proc中)拆分为多个列以进行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
答案 0 :(得分:3)
您可以group by
对SupplierID
节点执行SUPPLIER
,并使用相关的子查询来获取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')
您可能在表中拥有供应商,因此如果您在主查询中使用该表,则无需执行group by
。
答案 1 :(得分:0)
我认为您不需要在SP中生成单独的结果集(我认为这就是您所要求的)。
通过对FOR XML
选项的各种调整,您应该能够在一个查询中生成此XML,但您可能需要使用EXPLICIT
选项。
这应该是一个很好的起点
select
SupplierID as SuppNo,
ProdCode
from
#t
for xml path('Supplier'), elements, type