2016-07-21 4 views
0

발송 예정일을 기준으로 금속 현물 가격을 인상하는 보고서를 작성 중입니다. 그것은 60 일 중서부 (MW) 평균을 사용합니다. 따라서 3 월에 약속 된 발송물의 경우 1 월부터 평균 MW가 사용됩니다. 테이블은 사용자가 정의한 것이며 정상적인 (loong story)처럼 필드를 당기는 것을 막을 수있는 몇 가지 문제가 있습니다.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 한 부분으로 선택에서 쿼리를 분할과 절 한 부분으로

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 보고서에 조인 어디에서 보고서를 실행하고 아래의 방법을 제공 데이터를 가져올 수 있는지 확인하십시오 ... 데이터를 가져올 수없는 경우 크리스탈 보고서에서 잘못된 데이터베이스를 가리키는 것처럼 데이터베이스 연결에 문제가 있습니다.

대신 쿼리 자체에 절은이 결정에 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) 

에서 크리스탈 리포트에서 동일하게 조작 할 수있는 곳이 당신이 많은 작동하지 않을 수 있습니다 TO_CHAR 같은 결정 문법에 맞게 sytax을 변경해야 할 기록.

당신은 데이터베이스 연결 자체가 잘못 그때 where 절의 두 번째 줄을 변경 올바른 연결을 전체 쿼리

+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 

를 붙여 과정을 따라하다 보면. 이제 작동합니다.

관련 문제