2016-07-21 26 views
0

出荷予定日に基づいてメタルスポット価格を引き上げるためのレポートを作成しています。 60日中西部(MW)平均を使用しています。したがって、3月に約束された出荷では、1月からの平均MWが使用されます。テーブルはユーザー定義であり、通常のようにフィールドを引っ張ることから私を守るいくつかの問題があります(ロングストーリー)。Crystal ReportsでSQLクエリが正しく実行されない

データベースの列ラベル([MONTH] [YEAR])と約束日の月と年を比較し、正しいMW平均を返すクエリを書きました。 OracleのSQL Developerでは正常に動作しますが、Crystalでは誤って実行され、同じ月のMW平均を返します(まったく実行されません)。これは参考用です。私はそれが日付やフォーマットとは何かを持っていると思ってい

select ap.invoice_Date indate, 
ap.invoice_no as invno, 
ap.vendor_id, 
apd.po_detail_id as podid, 
por.promise_date as pd, 
dat.parent_id as vendid, 
dat.ud_cols_id as cols, 
col.col_label label, 
dat.cuser as ingot 
from ud_data dat 
inner join ud_cols col 
on dat.ud_cols_id = col.id 
inner join apinvoice ap 
on ap.vendor_id = dat.parent_id 
inner join apinvoice_detail apd 
on ap.id = apd.apinvoice_id 
inner join po_detail pod 
on apd.po_detail_id = pod.id 
inner join po_releases por 
on pod.id = por.po_detail_id 
where trim(TO_CHAR(add_months(por.promise_date, -2), 'MONTH'))= upper(substr(COL.col_label, 1, length(col_label)-5)) 
and substr(por.promise_date, -2, 2) = substr(col.col_label, -2, 2) 
and ud_cols_id in (94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 146) 
order by ap.invoice_Date 

(私が知っているそれは不格好ビットです)が、私はそれらを勃発し、比較が一致します。私はすべてのコンボを試すことができました(しかし、左の外側の結合に固執し、内側の結合によってレポートが空白に戻りました)。フィールドデータをブラウズすることも何もありません。

すべてのアイデアをいただければ幸いです。私は迷っています。

+0

代わりにクエリを入力しましたか?私は? –

+0

いつも解決策を見ていく前に...あなたは赤の質問に答えなかった。 – CoSpringsGuy

+0

@redsあなたが何を求めているのか分かりません。私はテーブルのリストにコマンドとして追加しました。 vendor_id上でAP請求書のベンダーIDにリンクされています。 – tr241009

答えて

0

実際にはデータベース上で動作すれば結晶で動作するはずですが、動作していなければ、データベースにデータが存在するので結晶レポートの作成方法を少し変更することができます完璧に働いています。

はchance.Firstが1つの部品として選択するには、クエリを分割し、どこ一部として句

select ap.invoice_Date indate, 
ap.invoice_no as invno, 
ap.vendor_id, 
apd.po_detail_id as podid, 
por.promise_date as pd, 
dat.parent_id as vendid, 
dat.ud_cols_id as cols, 
col.col_label label, 
dat.cuser as ingot 
from ud_data dat 
inner join ud_cols col 
on dat.ud_cols_id = col.id 
inner join apinvoice ap 
on ap.vendor_id = dat.parent_id 
inner join apinvoice_detail apd 
on ap.id = apd.apinvoice_id 
inner join po_detail pod 
on apd.po_detail_id = pod.id 
inner join po_releases por 
on pod.id = por.po_detail_id 

今でちょうど上記の選択クエリは、Crystalレポートに参加し、レポートを実行し、以下のアプローチを与えますデータを取得できるかどうかを確認してください。データを取得できない場合、クリスタルレポートで間違ったデータベースを指しているようなデータベース接続に問題があります。

の代わりに、あなたは多くのto_char関数が動作しない場合がありますように結晶構文に合わせてsytaxを変更する必要がある結晶ではRecord Selection Formula

where trim(TO_CHAR(add_months(por.promise_date, -2), 'MONTH'))= upper(substr(COL.col_label, 1, length(col_label)-5)) 
and substr(por.promise_date, -2, 2) = substr(col.col_label, -2, 2) 
and ud_cols_id in (94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 146) 

の結晶レポートで同じ操作できるクエリ自体でwhere句を書きます。

あなたが表示された場合、データベース接続は、正しい接続を行うと、私はWHERE句の2行目を変更し、全クエリ

+0

寄付いただきありがとうございます! Crystalにwhere句を入れることは考えていませんでした。私はそれを理解したと思う。私が思う約束日のsubstr()でした。 – tr241009

0
select ap.invoice_Date indate, 
ap.invoice_no as invno, 
ap.vendor_id, 
apd.po_detail_id as podid, 
por.promise_date as pd, 
dat.parent_id as vendid, 
dat.ud_cols_id as cols, 
col.col_label label, 
dat.cuser as ingot 
from ud_data dat 
inner join ud_cols col 
on dat.ud_cols_id = col.id 
inner join apinvoice ap 
on ap.vendor_id = dat.parent_id 
inner join apinvoice_detail apd 
on ap.id = apd.apinvoice_id 
inner join po_detail pod 
on apd.po_detail_id = pod.id 
inner join po_releases por 
on pod.id = por.po_detail_id 
where trim(upper(TO_CHAR(add_months(por.promise_date, -2), 'MON')))= upper(substr(COL.col_label, 1, 3)) 
and trim(to_char(por.promise_date, 'YY')) = substr(col.col_label, -2, 2) 
and ud_cols_id in (94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 146) 
order by por.promise_date 

を貼り付けることにより、プロセスに従う間違っそのものです。今すぐ動作します。

関連する問題