CASE里面的SELECT..FOR XML创建条件元素

时间:2017-03-03 08:59:41

标签: xml sql-server-2008

我如何在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>

1 个答案:

答案 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>