html - 在 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' 对所有内容进行分组,并创建如下表:
+-----------------+----------+--------+
| 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>
但看起来我们遗漏了一些值。我们最终得到了一个正确的 Total 行,但是我们上面的行并不等于总数。
注意:请原谅我的无知,因为我对 XML/XSL 很陌生。我今天才开始学习它。
解决方案
您的求和表达式应该是:
<xsl:value-of select="format-number(sum(current-group()/ACTUAL), '#,###')"/>
为了对当前组的所有成员求和。您现有的代码只是对上下文节点的 ACTUAL 子元素求和 - 对于每个组来说,它是组的第一个成员。
推荐阅读
- amazon-web-services - S3 触发器向 AWS SNS 发送批量上传通知
- c++ - 链表指针问题
- python - Pygame.mouse.get_pressed() 不会检测到我的大部分点击
- python - 固定长度队列,当元素附加到末尾时删除第一个元素(FIFO)
- java - Is EJB 3.1 TimerService Daylight Saving aware?
- sql - Postgresql 不显示创建者的权限。为什么?
- java - Not Able to Debug the Code using test cases
- android - 水平居中对齐 UI 项
- c# - c#asp.net如何为只读剃须刀制作下拉列表
- llvm - llvm 传递到展平(一些)嵌套循环