iReport 不接受 SQL SUM 函数
iReport not accepting SQL SUM function
iReport 似乎不接受正常的 SQL SUM 函数,我很难找到解决这个问题的方法。
我正在尝试使用 SUM(qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty
,它似乎不喜欢那样,或者我只是添加变量并说 SUM(qtytofulfill - qtyfulfilled) AS qty
。
这似乎不是语法错误,但 iReport 根本不会接受它作为 SQL 语句。我张贴了一张我尝试使用此 SQL 语句的照片以及它也给出的错误。非常感谢任何对我正在做的事情甚至我实际应该使用的东西的帮助,特别是对于 iReport。
谢谢!
-柯尔特
我相信它将 sum 中的 2 列名称视为变量,而不是 table 列
我建议:
1) 检查您的 SQL 语法,因为您没有对所有非聚合列进行分组(您只是对 SO_ID)
进行分组
2) 最后检查总和的参数:别名而不是字段
这会很好,
In standard SQL (but not MySQL), when you use GROUP BY, you must list
all the result columns that are not aggregates in the GROUP BY clause.
SELECT
SOITEM.'QTYFULFILLED' AS QTYFULFILLED,
SOITEM.`QTYTOFULFILL` AS QTYTOFULFILL,
SOITEM.`SOID` AS SOITEM_SOID,
SUM(SOITEM.`QTYFULFILLED`) AS Sum_Quantity_Fullfilled,
SUM(SOITEM.`QTYTOFULFILL`) AS Sum_Quantity_to_Fullfill,
(SUM(SOITEM.`QTYFULFILLED`) - SUM(SOITEM.`QTYTOFULFILL`)) AS QTY,
SO.`ID` AS SO_ID
FROM
`SO` SO INNER JOIN `SOITEM` SOITEM ON SO.`ID` = SOITEM.`SOID`
GROUP BY SOITEM.'QTYFULFILLED',SOITEM.`QTYTOFULFILL`,SOITEM.`SOID`,SO.`ID`
希望对您有所帮助。
既然你标记了这个 jasper 报告,而且你似乎喜欢报告中单个记录的值和所有记录的总和,我会建议这个。
Select 您的记录 没有 任何总和值。
SELECT
SOITEM.'QTYFULFILLED' AS QTYFULFILLED,
SOITEM.`QTYTOFULFILL` AS QTYTOFULFILL,
SOITEM.`SOID` AS SOITEM_SOID,
SO.`ID` AS SO_ID
FROM
`SO` SO INNER JOIN `SOITEM` SOITEM ON SO.`ID` = SOITEM.`SOID`
定义字段。 es
<field name="QTYFULFILLED" class="java.lang.Double">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="QTYTOFULFILL" class="java.lang.Double">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
定义求和变量
<variable name="SUM_QTYFULFILLED" class="java.lang.Double" calculation="Sum">
<variableExpression><![CDATA[$F{QTYFULFILLED}]]></variableExpression>
</variable>
<variable name="SUM_QTYTOFULFILL" class="java.lang.Double" calculation="Sum">
<variableExpression><![CDATA[$F{QTYTOFULFILL}]]></variableExpression>
</variable>
就是这样!,如果您想将 QTA 的差异输出到文本字段
<textField evaluationTime="Report">
<reportElement x="10" y="4" width="100" height="20" uuid="7aa31c20-bd5f-4222-9744-4206d096bb90"/>
<textElement>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[NumberFormat.getNumberInstance().format($V{SUM_QTYFULFILLED}.doubleValue()-$V{SUM_QTYTOFULFILL}.doubleValue())]]></textFieldExpression>
</textField>
记得设置评估时间来报告(因为它需要在打印之前完成计算变量)
iReport 似乎不接受正常的 SQL SUM 函数,我很难找到解决这个问题的方法。
我正在尝试使用 SUM(qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty
,它似乎不喜欢那样,或者我只是添加变量并说 SUM(qtytofulfill - qtyfulfilled) AS qty
。
这似乎不是语法错误,但 iReport 根本不会接受它作为 SQL 语句。我张贴了一张我尝试使用此 SQL 语句的照片以及它也给出的错误。非常感谢任何对我正在做的事情甚至我实际应该使用的东西的帮助,特别是对于 iReport。
谢谢!
-柯尔特
我相信它将 sum 中的 2 列名称视为变量,而不是 table 列
我建议:
1) 检查您的 SQL 语法,因为您没有对所有非聚合列进行分组(您只是对 SO_ID)
进行分组2) 最后检查总和的参数:别名而不是字段
这会很好,
In standard SQL (but not MySQL), when you use GROUP BY, you must list all the result columns that are not aggregates in the GROUP BY clause.
SELECT
SOITEM.'QTYFULFILLED' AS QTYFULFILLED,
SOITEM.`QTYTOFULFILL` AS QTYTOFULFILL,
SOITEM.`SOID` AS SOITEM_SOID,
SUM(SOITEM.`QTYFULFILLED`) AS Sum_Quantity_Fullfilled,
SUM(SOITEM.`QTYTOFULFILL`) AS Sum_Quantity_to_Fullfill,
(SUM(SOITEM.`QTYFULFILLED`) - SUM(SOITEM.`QTYTOFULFILL`)) AS QTY,
SO.`ID` AS SO_ID
FROM
`SO` SO INNER JOIN `SOITEM` SOITEM ON SO.`ID` = SOITEM.`SOID`
GROUP BY SOITEM.'QTYFULFILLED',SOITEM.`QTYTOFULFILL`,SOITEM.`SOID`,SO.`ID`
希望对您有所帮助。
既然你标记了这个 jasper 报告,而且你似乎喜欢报告中单个记录的值和所有记录的总和,我会建议这个。
Select 您的记录 没有 任何总和值。
SELECT
SOITEM.'QTYFULFILLED' AS QTYFULFILLED,
SOITEM.`QTYTOFULFILL` AS QTYTOFULFILL,
SOITEM.`SOID` AS SOITEM_SOID,
SO.`ID` AS SO_ID
FROM
`SO` SO INNER JOIN `SOITEM` SOITEM ON SO.`ID` = SOITEM.`SOID`
定义字段。 es
<field name="QTYFULFILLED" class="java.lang.Double">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="QTYTOFULFILL" class="java.lang.Double">
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
定义求和变量
<variable name="SUM_QTYFULFILLED" class="java.lang.Double" calculation="Sum">
<variableExpression><![CDATA[$F{QTYFULFILLED}]]></variableExpression>
</variable>
<variable name="SUM_QTYTOFULFILL" class="java.lang.Double" calculation="Sum">
<variableExpression><![CDATA[$F{QTYTOFULFILL}]]></variableExpression>
</variable>
就是这样!,如果您想将 QTA 的差异输出到文本字段
<textField evaluationTime="Report">
<reportElement x="10" y="4" width="100" height="20" uuid="7aa31c20-bd5f-4222-9744-4206d096bb90"/>
<textElement>
<paragraph lineSpacing="Single"/>
</textElement>
<textFieldExpression><![CDATA[NumberFormat.getNumberInstance().format($V{SUM_QTYFULFILLED}.doubleValue()-$V{SUM_QTYTOFULFILL}.doubleValue())]]></textFieldExpression>
</textField>
记得设置评估时间来报告(因为它需要在打印之前完成计算变量)