2017-03-03 45 views
0

如何/我可以使用CASE裏面SELECT..FOR XMLCASE裏面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

您需要創建兩列,並讓那些你不想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」,則不會產生任何結果。一個選項應該是'> ='或'<='... – Shnugo