2016-03-29 19 views
1

私はBIRTにレポートを書いています。私は自分のデータセットに2つの入力パラメータを持っています。パラメータを複数回再利用

句に2度使用したい2番目のパラメータです。私は句を使って私がこれを行うのがわかった。これはpostgresqlデータベースなので、私はデュアルから必要はありません。

次のように私のSQLは次のとおりです。

with "params" as (select ? as "sname", ? as "ename") 
select "user"."fullName", "user"."address1", "user"."address2", "user"."city", "provinces"."abbreviation", "user"."postalcode", "client"."companyName" 
from "user", "params" 
LEFT JOIN "client" on "user"."client" = "client"."id" 
LEFT JOIN "provinces" on "user"."province" = "provinces"."id" 
WHERE "user"."fullName" >= "params"."sname" and (("user"."fullName" <= "params"."ename") or ("params"."ename" =''))` 

私はこれを実行するか、BIRTの編集データセット画面で結果をプレビューしようとすると、私は次のエラーを取得する:

Error happened while running the report. at .... Caused by: org.eclipse.birt.report.data.adapter.api.AdapterException: An exception occurred during processing. Please see the following message for details: Failed to prepare the query execution for the data set: user Cannot get the result set metadata. org.eclipse.birt.report.data.oda.jdbc.JDBCException: SQL statement does not return a ResultSet object. SQL error #1:ERROR: invalid reference to FROM-clause entry for table "user" Hint: There is an entry for table "user", but it cannot be referenced from this part of the query. Position: 252;

私はできませんこれでやってください。私が見たすべてから、それはうまくいくはずです。

+0

関連のない、しかし: 'のparamsと(SNAME、ENAME)のように:あなたも短いCTEを行うことができます(値(?、?))... ' –

+0

[テーブルのエントリがありますが、クエリのこの部分からは参照できません]との[明示的な結合と暗黙的な結合の混在] //stackoverflow.com/questions/6347897/mixing-explicit-and-implicit-joins-fails-with-there-is-anentent-for-table-b) –

答えて

0

BirtのSQL-Queryに複数のパラメータを追加し、必要に応じてBirtからInput-Parameterを再利用することができます。 Compare my answer to this question

ですから、with-clauseせずにクエリを書いて、合流明示的および暗黙的の混合を防ぐことができます。

select "user"."fullName", "user"."address1", "user"."address2", "user"."city", "provinces"."abbreviation", "user"."postalcode", "client"."companyName" 
from "user" 
LEFT JOIN "client" on "user"."client" = "client"."id" 
LEFT JOIN "provinces" on "user"."province" = "provinces"."id" 
WHERE "user"."fullName" >= ? and (("user"."fullName" <= ?) or (? ='')) 
+0

この種の作業をしました。 Birtは私の第2パラメータが= ''であることを認識していませんでしたが。そこで、パラメータをnullにデフォルト設定し、where句の末尾を次のように変更しました: '' select user "。" fullName "、" user "。" address1 "、" user "。" address2 "、" user " "user"、 "user"、 "client"、 "client"、 "city"、 "provinces"のいずれかを指定します。 "id" "province"を "user"に置き換えます。 "province" = "provinces"。 "id" WHERE "user"。 "fullName"> =? ( "user"。 "fullName" <=?)または(?is null)) ' – farley

+0

私は今それをすべて解決しました。ご協力いただきありがとうございます。私は以前のソリューションを見つけたことを願っています。 – farley

関連する問題