2015-11-10 4 views
0

iReport, похоже, не принимает нормальную функцию SQL SUM, и мне трудно найти способ обойти это.iReport не принимает функцию SQL SUM

Я пытаюсь использовать SUM(qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty, и мне не кажется, что это или я просто добавляю переменные и говорю SUM(qtytofulfill - qtyfulfilled) AS qty.

Это не похоже на синтаксическую ошибку, но iReport просто не примет ее как инструкцию SQL. Я размещаю картинку, в которой я пытаюсь использовать этот оператор SQL, и ошибку, которую он также дает. Любая помощь в том, что я делаю или даже то, что я на самом деле должен использовать, особенно для iReport, очень ценится.

Спасибо!

-Colt

enter image description here

+0

Вы поняли это? –

+0

@SubinCPoonamgode нет у меня нет, и я пробовал все, что знаю.Я не хочу, чтобы каждый элемент в инструкции SELECT был SUM (PARAMETER) AS NAME:/Я просто хочу SUM (qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty, чтобы быть единственной «суммированной». И я не могу понять, как это сделать. Я видел еще один пример, когда кто-то помещал одну функцию SUM в свой собственный оператор SELECT внутри основного SELECT, но я не могу понять, как это сделать. – colt

ответ

1

Это будет работать нормально,

В стандартном SQL (но не MySQL), при использовании GROUP BY, вы должны перечислить все результирующие столбцы, а не агрегаты в предложении GROUP BY.

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` 

Надеется, что это помогает.

+0

Вопрос: Я сделал это, и я получил сообщение об ошибке «Недопустимое выражение в списке выбора (не содержащееся ни в ggregate funtion, ни в предложении GROUP BY). У меня нет предложения GROUP BY, и я не уверен, что разместить в нем – colt

+0

Просто разместите 'GROUP BY 1' и посмотрите, будет ли ошибка? –

+0

Я просто сделал это, и я получаю ту же ошибку:/ – colt

0

Я считаю, что это лечение с 2 имен столбцов внутри суммы в качестве переменных, а не столбцы таблицы

+0

Это проблема, которую я пытаюсь исправить. Я не хочу, чтобы каждый элемент в инструкции SELECT был SUM (PARAMETER) AS NAME:/Я просто хочу SUM (qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty, чтобы быть единственной «суммированной». И я не могу понять, как это сделать. Я видел еще один пример, когда кто-то помещал одну функцию SUM в свой собственный оператор SELECT внутри основного SELECT, но я не могу понять, как это сделать. – colt

0

Я хотел бы предложить:

1) проверить синтаксис SQL так как вы не группируете все неагрегатные столбцы (вы группируете только SO_ID)

2) в случае проверки аргументы вашей суммы: псевдоним вместо полей

+0

Это проблема, которую я пытаюсь исправить. Я не хочу, чтобы каждый элемент в инструкции SELECT был SUM (PARAMETER) AS NAME:/Я просто хочу SUM (qtytofulfill.SOITEM - qtyfulfilled.SOITEM) AS qty, чтобы быть единственной «суммированной». И я не могу понять, как это сделать. Я видел еще один пример, когда кто-то помещал одну функцию SUM в свой собственный оператор SELECT внутри основного SELECT, но я не могу понять, как это сделать. – colt

0

Поскольку вы отметили это сообщение jasper, и вам кажется, что вам нравится как значение отдельной записи, так и сумма всех записей в вашем отчете, я бы предложил это.

Выберите ваши записи без любые суммы.

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` 

Определить поля. эс

<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> 

запомнить, чтобы установить оценку время для отчета (так как необходимо завершить вычисление переменных перед его печатью)

 Смежные вопросы

  • Нет связанных вопросов^_^