sql - 根据 XML 格式的列将一个结果集拆分为多个结果集

标签 sql sql-server xml t-sql

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

相关文章:

使用两个日期的 SQL 查询

sql-server - 如何在数据库项目中设置初始数据库文件大小和文件增长?

android - 如何修改XML节点值?

asp.net - SQL Server 2008中两个数据库之间的外键关系

sql - 每分钟计算两列的行数

php - 通过php在xml文件中添加节点

xml - XSLT 变量设置和在表达式中的使用

mysql - Oracle 等效于 MySQL 更新忽略

mysql - 在查询中引用 MySQL "AS"值的任何方法?

c# - 防止字符串转换为 Null 失败的最佳方法