在 XSLT 中按求和分组

Group By Summations in XSLT

假设我们有如下数据:

<ROW>
  <CAT_CODE>3 COE</CAT_CODE>
  <ACCT_2>4400</ACCT_2>
  <ACCT2_DESC>Employee Costs</ACCT2_DESC>
  <ACCT_3>4490</ACCT_3>
  <ACCT3_DESC>Salaries</ACCT3_DESC>
  <ACTUAL>55.30</ACTUAL>
</ROW>

我们希望按“ACCT_2”和 CAT_CODE='3 COE' 对所有内容进行分组,并创建了一个 table,如下所示:

+-----------------+----------+--------+
| Account Level 2 | Category | Actual |
+-----------------+----------+--------+
| 4400            | 3 COE    | 4,609  |
+-----------------+----------+--------+
| 4500            | 3 COE    | 9,870  |
+-----------------+----------+--------+
| 4600            | 3 COE    | 1,343  |
+-----------------+----------+--------+
 . . . 
+-----------------+----------+--------+
| Total:          |          | 23,998 |
+-----------------+----------+--------+

这样的事情是如何实现的?我们有以下代码:

   <table>
     <tr>
       <td>Account Level 2</td>
       <td>Category</td>
       <td>Actual</td>
     </tr>
     <xsl:for-each-group select="ROW[CAT_CODE='3 COE']" group-by="ACCT_3">
       <tr>
         <td><xsl:value-of select="ACCT_3"/></td>
         <td><xsl:value-of select="CAT_CODE"/></td>
         <td><xsl:value-of select="format-number(sum(ACTUAL), '#,###')"/></td>
       </tr>
     </xsl:for-each-group>
     <tr>
       <td>Total: </td>
       <td></td>
       <td><xsl:value-of select="format-number(sum(ROW[CAT_CODE='3 COE']/ACTUAL), '###,###')"/></td>
     </tr>
   </table>

但看起来我们遗漏了一些值。我们最终得到了正确的总计行,但我们上面的行总和不等于总数。

注意:请原谅我的无知,因为我是 XML/XSL 的新手。今天才开始学。

您的求和表达式应该是:

<xsl:value-of select="format-number(sum(current-group()/ACTUAL), '#,###')"/>

为了求和当前组的所有成员。您现有的代码仅对上下文节点的实际子元素求和 - for-each-group 是该组的第一个成员。