2016-07-21 5 views
0

Ich schreibe einen Bericht, um die Metallspotpreise basierend auf dem Zusagedatum der Sendungen zu ermitteln. Es verwendet den Durchschnitt von 60 Tagen im mittleren Westen (MW). So wird für eine im März versprochene Sendung der MW-Durchschnitt ab Januar verwendet. Die Tabelle ist benutzerdefiniert und es gibt einige Probleme, die mich davon abhalten, das Feld wie normal zu ziehen (loong story).Crystal Reports führt die SQL-Abfrage nicht korrekt aus

Also schrieb ich eine Abfrage, um die Spaltenbezeichnung in der Datenbank ([MONTH] [YEAR]) mit dem Monat und Jahr des Versprechensdatums zu vergleichen und den korrekten MW-Durchschnittswert zurückzugeben. Es läuft ordnungsgemäß in Oracle SQL Developer, aber in Crystal läuft es falsch und gibt den MW-Durchschnitt des gleichen Monats zurück (oder läuft überhaupt nicht). Es ist unten als Referenz. (Ich weiß, es ist ein bisschen klobig)

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 

Ich denke, es hat etwas mit den Daten und die Formatierung zu tun, aber ich brach diejenigen aus und die Vergleiche zusammenpassen. Ich probierte jede Kombination der Verknüpfung konnte ich (aber mit linken äußeren Joins fest, innere Verbindung machte den Bericht leer). Beim Durchsuchen der Felddaten gibt es auch nichts.

Irgendwelche Ideen werden geschätzt. Ich bin ratlos ..

+0

Wo haben Sie stattdessen Ihre Suchanfrage gestellt? Tu ich das? –

+0

Bevor ich mich verbringe, jederzeit eine Lösung durchzusehen ... Du hast keine rote Frage beantwortet. – CoSpringsGuy

+0

@reds Ich bin mir nicht sicher, ob ich verstehe, was du verlangst. Ich habe es als Befehl in der Tabelle hinzugefügt. auf Vendor_id mit der Vendor ID auf der AP-Rechnung verknüpft. – tr241009

Antwort

0

Eigentlich sollte es in Kristall funktionieren, sobald es auf Datenbank funktioniert, aber wenn es nicht funktioniert, dann können Sie ein bisschen ändern, wie Sie einen Kristall Bericht bilden, wie Daten in der Datenbank vorhanden sind und es funktioniert perfekt.

gibt den folgenden Ansatz eine chance.First die Abfrage in Split als einen Teil zu wählen und wo Klausel als einen Teil

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 

Jetzt nur noch die oben Auswahlabfrage mit Verknüpfungen in Crystal Report und den Bericht ausführen und Sehen Sie, ob Sie Daten bekommen können ... Wenn Sie keine Daten bekommen können, dann gibt es ein Problem mit der Datenbankverbindung, wie Sie vielleicht auf eine falsche Datenbank in Crystal Reports zeigen.

Anstatt das Schreiben der where-Klausel in Abfrage selbst Sie das gleiche in Crystal Reports in 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) 

In Kristall manipulieren können Sie viele brauchen die sytax zu ändern Kristall Syntax wie to_char passen möglicherweise nicht.

Wenn Sie sehen, die Datenbankverbindung ist selbst dann falsch richtige Verbindung herzustellen und den Prozess folgen, indem sie die gesamte Abfrage einfügen

+0

Danke für den Beitrag! Ich hatte nicht daran gedacht, die Where-Klausel in Crystal zu setzen. Ich denke, ich habe es herausgefunden. Es war das substr() des Versprechensdatums, denke ich. – 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 

ich die zweite Zeile der Where-Klausel geändert. Funktioniert jetzt.