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

时间:2016-01-19 18:22:16

标签: mysql jasper-reports

我目前正在撰写一份报告,并注意到我正在重复上述值。问题不在于值是重复的,而是我得到的值在第一个初始值之后应为0。

例如:

我的报告显示的估算运费可能是$700,而且由于订单分为3次发货,报告会打印$700 3次。这不是真的,因为估计的运输只应计算一次。

我正在使用iReport

我的问题是: 如何保持第一个重复值相同但每个值设置为' 0' ?

这是一张更好解释的图片。 enter image description here

这是我的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。即使将变量设置为组。

这是一张进一步解释的图片 -

enter image description here

enter image description here

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:1)

添加到你的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,重复SOID

时将&gt; 1

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

<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个频段,然后将textField放入此频段