ArraySum只是查询的cfoutput中的某些行

时间:2013-08-30 15:23:15

标签: sql coldfusion

我正在尝试仅向此输出添加某些行。目前,此输出添加了所有行,用于

末尾的“总计”行
<cfoutput query="qrySummary">

#numberFormat(ArraySum(ListToArray(ValueList(qrySummary.secThreeCount))), ",")#

这显然总计了所有的SecThreeCount值,但是如果我想从该列表中排除最后两行呢?

冷融可能吗?

(如果这有所不同)&gt;&gt;所以有13行返回,我想要前11行并排除最后2行。

我知道我可以限制该查询的SQL返回以排除这两行,但我希望编写更少的代码并保持整洁。并且还要了解它是否可能:)

提前致谢。

3 个答案:

答案 0 :(得分:3)

嗯,我认为如果你不需要这两行,你不应该首先归还它们。那将是最好的答案。从你的陈述“但我想要更少的代码来编写”你在错误的地方进行优化:不要为自己优化 ,优化解决方案。

Leigh来到我的下方,因为我一直在为此测试代码,但这是使用subList()的概念证明:

numbers = queryNew("");
queryAddColumn(numbers, "id", "integer", [1,2,3,4,5,6]);
queryAddColumn(numbers, "maori", "varchar", ["tahi", "rua", "toru", "wha", "rima", "ono"]);

maori = listToArray(valueList(numbers.maori));
subset = maori.subList(2,5);

writeDump([numbers, subset]);

这将返回一个包含元素["toru","wha","rima"]的数组。

答案 1 :(得分:1)

如果您正在运行CF10,则有一个选项正在使用ArraySlice。只获取前十一个元素,然后应用arraySum

  <cfset allValues = ListToArray(ValueList(qrySummary.secThreeCount))>
  <cfset subTotal = arraySum( arraySlice(allValues, 1, 11))>

对于早期版本,有未记录的subList(...) approach。它充分利用了CF阵列是java.util.List对象的事实,并使用List.subList(..)来获取数组的子集。

答案 2 :(得分:1)

另一种方法。您不想为最后2个元素添加值,因此请从数组中删除它们:

<cfset values = ListToArray(ValueList(qrySummary.secThreeCount))>

<!--- delete the last element --->
<cfset arrayDeleteAt(values, arrayLen(values))>

<!--- delete the last element again --->
<cfset arrayDeleteAt(values, arrayLen(values))>

#numberFormat(ArraySum(values), ",")#

或者,鉴于你无论如何都要循环查询,你可以随意添加总数(如果你在最后一行或倒数第二行,只需要一点点逻辑就不会打扰)