2

我正在尝试将 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
4

2 回答 2

3

您可以对节点进行group byon并使用相关的子查询来获取节点。SupplierIDSUPPLIERSUPPLIER_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.

于 2012-08-10T14:57:50.303 回答
0

我认为您不需要在 SP 中生成单独的结果集(我认为这就是您所要求的)。

通过对选项进行各种调整FOR XML,您应该能够在一个查询中生成此 XML,尽管您可能需要使用该EXPLICIT选项。

这应该是一个很好的起点

select 
    SupplierID as SuppNo,
    ProdCode
from 
    #t
for xml path('Supplier'), elements, type
于 2012-08-10T14:30:12.393 回答