2016-07-21 4 views
0

Я пишу отчет, чтобы вытащить цены на металлы в зависимости от даты обещания отгрузки. Он использует средний средний уровень за 60 дней (МВт). Так что для отправки, обещанного в марте, используется среднее значение MW с января. Таблица определена пользователем, и есть некоторые проблемы, которые мешают мне просто вытаскивать поле, как обычное (история).Crystal Reports не выполняет SQL-запрос правильно

Итак, я написал запрос, чтобы сравнить метку столбца в базе данных ([МЕСЯЦ] [ГОД]) с месяцем и годом даты обещания и вернуть правильное среднее значение MW. Он работает правильно в Oracle Developer 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. – 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 Report и запустить отчет и посмотрите, можете ли вы получить данные ... Если вы не можете получить данные, тогда возникает проблема с подключением к базе данных, например, вы можете указывать на неправильную базу данных в отчетах о кристаллах.

Вместо того, чтобы писать, где положение в самом запросе вы можете управлять тем же в отчетах хрустальных в 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) 

В кристалле вы много нужно изменить sytax в соответствии с хрустальным синтаксисом как to_char может не работать.

Если вы видите соединение с базой данных само по себе не так, то сделать правильное подключение и следить за процессом, вставляя весь запрос

+0

Спасибо за вклад! Я не думал о том, чтобы положить предложение where в Crystal. Кажется, я понял это. Я думаю, что это была субстанция() обещания. – 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 

Я изменил вторую линию, где положение. Работает сейчас.

Смежные вопросы