私は、ネストのさまざまなレベルでいくつかのXMLを生成しようとしている、とオーバー簡素化の危険にさらされて、出力XML形式で緩くなります。CTEとFOR XML句を組み合わせるにはどうすればよいですか?
<invoice number="1">
<charge code="foo" rate="123.00">
<surcharge amount="10%" />
</charge>
<charge code="bar" />
</invoice>
私はこのために継承しているデータベーススキーマ別のテーブルに課金されていることがあります。つまり課金元のテーブルに基づいて課金される課金額が異なります。
はあなたcannot use UNION
s with FOR XML
が、私はいくつかのUNION
はCTEにINGのやったことを考えると、それほどの線に沿って何か:今
WITH Charges ([@code], [@rate], surcharge, InvoiceId) AS (
SELECT code AS [@Code], amount AS [@rate], NULL as surcharge, InvoiceId
FROM item.charges
UNION ALL
SELECT
code AS [@Code],
amount AS [@rate],
(
SELECT amount AS [@amount]
FROM order.surcharges os
WHERE oc.ChargeId = os.ChargeId
FOR XML PATH('surcharge'), TYPE
),
InvoiceId
FROM order.charges oc
)
SELECT
Number AS [@number],
(
SELECT
[@code],
[@rate],
surcharge
FROM Charges
WHERE Charges.InvoiceId = i.InvoiceId
)
FROM Invoices i
FOR XML PATH('invoice'), TYPE
は、それは(ネストされた<surcharge>
注)与え、信じられないほど近いです:
<invoice number="1">
<charge code="foo" rate="123.00">
<surcharge>
<surcharge amount="10%" />
</surcharge>
</charge>
<charge code="bar" />
</invoice>
しかし、私は、要素の内容としてではなく、新しい要素として扱われるXML列の値が含まれるように、エンドクエリを取得する方法を見つける必要があります。これは可能ですか、新しいアプローチをとる必要がありますか?
サブクエリがEXISTSとともに導入されていない場合、選択リストで指定できる式は1つだけです。 – user3752281
@ user3752281その解決策は私のために働いたので、私はあなたのコメントを理解していないのですか? –