0

このリクエストに基づく私のレポート:

select "Annee" ,"Diam", sum("Consommation") from "Consom_N","CptDim"
where "Annee" >= $P{a1} and "Annee" <= $P{a2} 
and "Consom_N"."NumCpt"="CptDim"."NumCpt"and "District"= $P{dst}
and $X{IN, cast("Diam" as character varying), DiamRQn}
group by "Annee","Diam"
order by "Annee"
;

「Diam」フィールドは smallint です。問題はこの部分にあります

$X{IN, cast("Diam" as character varying), DiamRQn}

DiamRQn は、リクエストからの複数選択である制御入力によって使用されるパラメーターです。キャストを削除すると、次のように表示されます。

PSQLException: ERROR: operator does not exist : smallint = character varying

キャストすると ireport preview で正常に動作しますが、jasperserver では、選択されたものと選択されていないもののすべての値がチャートに表示されます。私が理解しているように、jasperserver の場合、キャストされた「diam」は常に「DiamRQn」コレクションに存在しますが、ireport ではすべて問題ありませんでした。

追加情報: DBMS: postgresql ireport バージョン: 5.0.1

4

2 に答える 2

0

Jasper で $IN{} ステートメントを使用して関数を実行する前に、いくつかの問題がありました。私の解決策は通常、最初に関数を実行し、その後に $IN{} ステートメントを実行することです。私は通常、サブセレクト内で必要な機能を実行し、その外側で $IN{} ステートメントを実行します。だからあなたはこれを試すことができます:

SELECT *
FROM
(
SELECT "Annee" ,"Diam", sum("Consommation"),
       cast("Diam" as character varying) AS Diam_char
FROM   "Consom_N","CptDim"
WHERE  "Annee" >= $P{a1} and "Annee" <= $P{a2} 
       and "Consom_N"."NumCpt"="CptDim"."NumCpt" and "District"= $P{dst}
GROUP BY "Annee","Diam"
) x
WHERE  $X{IN, Diam_char, DiamRQn}
ORDER BY "Annee"

おそらく where 句の一部を Consom_N テーブルと CptDim テーブル間の結合に移動することもできますが、それはオプションです。

SELECT *
FROM
(
SELECT "Annee" ,"Diam", sum("Consommation"),
        cast("Diam" as character varying) AS Diam_char 
FROM   "Consom_N"
       JOIN "CptDim" ON "Consom_N"."NumCpt"="CptDim"."NumCpt" 
WHERE  "Annee" >= $P{a1} and "Annee" <= $P{a2} 
       and "District"= $P{dst}
GROUP BY "Annee","Diam"
) x
WHERE  $X{IN, Diam_char, DiamRQn}
ORDER BY "Annee"
于 2013-06-10T14:29:47.293 に答える