2017-03-03 13 views
0

CASESELECT..FOR XMLの内部でどうやって使うことができますか?CASE inside SELECT..FOR条件付き要素を作成するためのXML

これが不可能な場合は、希望する要素名を決定し、値を入力する方法がありますか。ロジックはif amount < 0 then create <PostClassDt> element else <PostClassCr>となります。金額は同じテーブルから取られます。このような

何か:

<Document> 
    <TxnList> 
    <Txn> 
     <Amt Curr="EUR">-123.45</Amt> 
     <PostClassDt>debit</PostClassDt> 
     </Txn> 
     <Txn> 
     <Amt Curr="USD">456.78</Amt> 
     <PostClassCr>return</PostClassCr> 
    </Txn> 
    </TxnList> 
</Document> 

答えて

1

あなたは、例えば、2つの列を作成し、あなたがNULLを望んでいないものを作り、その後、NULL要素はノードを作成していないする必要があります

SELECT [Amt/@Curr] = t.Curr, 
     t.Amt, 
     PostClassDt = CASE WHEN Amt < 0 THEN 'debit' END, 
     PostClassCr = CASE WHEN Amt >= 0 THEN 'return' END 
FROM (VALUES 
      ('EUR', -123.45), 
      ('USD', 456.78) 
     ) t (Curr, Amt) 
FOR XML PATH('Txn'), ROOT('TxnList'); 

これは与える:

<TxnList> 
    <Txn> 
    <Amt Curr="EUR">-123.45</Amt> 
    <PostClassDt>debit</PostClassDt> 
    </Txn> 
    <Txn> 
    <Amt Curr="USD">456.78</Amt> 
    <PostClassCr>return</PostClassCr> 
    </Txn> 
</TxnList> 
+1

グレートを!ちょっとしたヒント:Amt = 0なら何も作成されません。 1つのオプションは '> ='または '<=' ...でなければなりません – Shnugo

関連する問題