1

我以前问过这种问题,但没有得到任何好的答案,可能是因为代码太长或者我的问题不清楚。这次我会尽力做到最好:) 到目前为止,我已经编写了代码来从表中查找行总和,效果很好:

<cfloop list="#product_id_list#" index="product_index">
    <cfloop list="#month_list#" index="month_index">
        <cfoutput query="GET_SALES_TOTAL">
            <cfif AY eq month_index and product_id eq product_index>
                <cfloop list="#type_index#" index="tt_index">
                    <cfset 'alan_#tt_index#_#month_index#_#product_index#' = evaluate(tt_index)>
                </cfloop>
            </cfif>
        </cfoutput>
    </cfloop>
</cfloop>
<cfset 'total_#ii_index#_#p_index#'=evaluate('total_#ii_index#_#p_index#') + #evaluate('alan_#ii_index#_#ddd_other#_#p_index#')#>

现在我想找到一个列总和。列总和的代码有效,但不正确。它计算最后一个产品的总和:

<cfloop list="#product_id_list#" index="product_index">
    <cfloop list="#month_list#" index="month_index">
        <cfoutput query="GET_SALES_TOTAL">
            <cfif AY eq month_index and product_id eq product_index>
                <cfloop list="#type_index#" index="tt_index">
                    <cfset 'alan2_#tt_index#_#month_index#_#product_index#' = evaluate(tt_index)>
                </cfloop>
            </cfif>
        </cfoutput>
    </cfloop>
</cfloop>
<cfset 'total2_#ddd_other#_#p_index#'=evaluate('total2_#ddd_other#_#p_index#') + #evaluate('alan2_#ii_index#_#ddd_other#_#p_index#')#>

行总和的输出:

<cfloop list="#product_id_list#" index="p_index">
    <cfloop list="#type_index#" index="kk_ind">
        <td align="center">
          <font color="##FF0000">#TLFormat(evaluate('total_#kk_ind#_#p_index#'),0)#</font>
        </td> 
    </cfloop>
</cfloop>

和列总和的输出:

<cfloop list="#month_list#" index="kk">
 <td align="center">
   <cfset satis_oran= evaluate('total2_#kk#_#p_index#')>
     #evaluate(satis_oran)#
 </td>
</cfloop>

我知道我没有循环按产品 id 输出的列,因为一旦我循环它,它会生成很多<td>',这意味着很多不相关的数据。这里有什么错误?

4

3 回答 3

19

如果您的查询中有一个列,并且您可以确保每个值都是数字,您还可以执行以下操作:

<cfset sum = arraySum(queryname['column'])>

但是,如果它遇到任何非数字值,则会导致错误,因此您可能需要在该字段周围放置一个合并语句或其他东西以确保任何空值都转换为零。

于 2011-05-14T14:03:05.083 回答
1

这很难遵循。

一些建议......

尝试在 sql 语句中执行此操作

您可以简单地使用 GROUP 语句来汇总所有这些值。就像是...

select productindex
    , datepart('yyyy', datecolumn) as year
    , datepart('mm', datecolumn) as month
    , sum(valcolumn) as valcolumnsum
from productinfo
group by productindex, datepart('yyyy', datecolumn), datepart('mm', datecolumn)

如果不是所有月份或产品实际上都在返回的查询中,那也没关系。您仍然可以在几个月后循环访问产品。

不要使用评估

据我了解,CF 实际上是在运行中编译,速度非常慢。如果您需要动态引用变量名,请使用范围和括号。如果您实际上正在保存要稍后评估的语句,则可能有其他选择

不要使用字体标签

在过去的 6 年里,我可能没有使用过字体标签。除非处理一些依赖于它的遗留代码,否则不应使用字体标签。

于 2011-05-14T12:17:40.230 回答
0

根据表列的数据类型,对较旧的 CF 版本尝试此操作:

<cfset theSum = ArraySum(ListToArray(ValueList(queryName.column))) />
于 2018-03-01T11:25:18.583 回答