将重复值设置为 0,同时保留第一个值

Set a repeating value to 0 while leaving the first value alone

我目前正在写一份报告,发现我得到了重复的值。问题不在于值在重复,而是我得到的值在第一个初始值之后应该为 0。

例如:

我的报告显示的估计运费可能是 0,并且由于订单被分成 3 批,报告打印了 0 3 次。这是不正确的,因为估计运费应该只计算一次。

我正在使用 iReport

我的问题是: 如何保持第一个重复值相同,但它之后的每个值都设置为“0”?

这里有一张图片可以更好地解释。


这是我的SQL

SELECT
 CUSTOMER."NAME" AS CUSTOMER_NAME,
 SO."NUM" AS SO_NUM,
 COMPANY."NAME" AS COMPANY_NAME,
 SHIPCARTON."FREIGHTAMOUNT" AS SHIPCARTON_FREIGHTAMOUNT,
 SHIP."SOID" AS SHIP_SOID,
 SOITEM."UNITPRICE" AS SOITEM_UNITPRICE,
 PRODUCT."PARTID" AS PRODUCT_PARTID,
 SHIP."DATESHIPPED" AS SHIP_DATESHIPPED
FROM
 "CUSTOMER" CUSTOMER INNER JOIN "SO" SO ON CUSTOMER."ID" = SO."CUSTOMERID"
 INNER JOIN "SHIP" SHIP ON SO."ID" = SHIP."SOID"
 INNER JOIN "SOITEM" SOITEM ON SO."ID" = SOITEM."SOID"
 INNER JOIN "PRODUCT" PRODUCT ON SOITEM."PRODUCTID" = PRODUCT."ID"
 INNER JOIN "SHIPCARTON" SHIPCARTON ON SHIP."ID" = SHIPCARTON."SHIPID",
 "COMPANY" COMPANY
WHERE
 PRODUCT."PARTID" = 947
 AND SHIP."DATESHIPPED" BETWEEN $P{From} AND $P{To}
 AND SHIPCARTON."FREIGHTAMOUNT" != 0
ORDER BY
2

更新

现在我的变量 shipPriceDif 无法计算我的新变量 estimatedShipPrice。即使在将变量设置为组之后。

这里有一张图进一步说明-

添加到您的 sql SOITEM."SOID"(我们会检查是否重复),您会得到一个字段

<field name="SOID" class="java.lang.Integer"/>

SOID

上创建一个
<group name="SOID">
    <groupExpression><![CDATA[$F{SOID}]]></groupExpression>
</group>

然后创建一个变量,该变量重置为计算SOID

出现的组
<variable name="SOID_Count" class="java.lang.Integer" resetType="Group" resetGroup="SOID" calculation="Count">
    <variableExpression><![CDATA[$F{SOID}]]></variableExpression>
</variable>

此代码的 jrxml 中的序列将是

<field name="SOID" class="java.lang.Integer"/>
<variable name="SOID_Count" class="java.lang.Integer" resetType="Group" resetGroup="SOID" calculation="Count">
    <variableExpression><![CDATA[$F{SOID}]]></variableExpression>
</variable>
<group name="SOID">
    <groupExpression><![CDATA[$F{SOID}]]></groupExpression>
</group>

此变量现在可用于评估您是否有重复的 SOID,当重复时它将 >1 SOID

textField 的示例 如果重复则显示 0 SOID

<textField pattern="###0">
    <reportElement x="143" y="0" width="105" height="20" uuid="a0e2ae10-906e-4d0f-aebd-30fc0c694aca">
    </reportElement>
    <textElement textAlignment="Right" verticalAlignment="Middle"/>
    <textFieldExpression><![CDATA[$V{SOID_Count}<=1?$F{SOITEM_UNITPRICE}:0]]></textFieldExpression>
</textField>

当您想改进报告的那一天,只需在您的组中添加一个 groupHeader band,然后将 textField 放入该 band