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 byノードに対してonを実行し、相関サブクエリを使用してSupplierIDノードを取得できます。SUPPLIERSUPPLIER_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 を 1 つのクエリで生成できるはずですEXPLICIT

これは良い出発点になるはずです

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