我如何在CASE
内使用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>
答案 0 :(得分: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>