2013-12-20 6 views
0

У меня есть следующий запрос SQL в подотчете:Получить 0 для столбца выбрать, где положение не соответствует

select ifnull(sum (commissionDocument.netto), 0) as commissionCreditNoteNetValue, 
    (select ifnull (sum (commissionDocument.netto), 0) 
    from tckopf as commissionDocument 
    where commissionDocument.referenzid = $P{document_id} 
     and commissionDocument.btyp = 7) as commissionInvoiceNetValue 
from tckopf as commissionDocument 
where commissionDocument.referenzid = $P{document_id} 
    and commissionDocument.btyp = 8 

Проблема заключается в том, что я получаю пустой отчет, если where пункта:

where commissionDocument.referenzid = $P{document_id} 
    and commissionDocument.btyp = 8 

не соответствует, а другой соответствует where.

where commissionDocument.referenzid = $P{document_id} 
    and commissionDocument.btyp = 7 
  1. SQL Fiddle example if the inner where clause match

  2. SQL Fiddle example if both where clauses match

  3. SQL Fiddle example if the outer where clause match

Я забыл упомянуть, что FoxPro DBF содержит данные и соединен через драйвер JDBC для iReport.

подотчет имеет только одно поле со следующим выражением .:

($F{commissionInvoiceNetValue} != null && $F{commissionCreditNoteNetValue} != null) 
? ($F{commissionInvoiceNetValue} - $F{commissionCreditNoteNetValue}) 
: ($F{commissionInvoiceNetValue} != null) ? $F{commissionInvoiceNetValue} 
: ($F{commissionCreditNoteNetValue} != null) ? $F{commissionCreditNoteNetValue} 
: "" 

Как я могу обойти это?

+0

Можете ли вы дать нам http://www.sqlfiddle.com/? – PeterRing

+0

... Является ли 'commisionDocument.referenzid' уникальным? Можем ли мы получить исходные данные и желаемые результаты? –

+0

Нет 'commisionDocument.referenzid' не является уникальным. Многие записи могут иметь один и тот же «референт». –

ответ

1

Я changed the query к:

SELECT 
( SELECT IFNULL (SUM (commissionInvoice.netto), 0) AS commissionInvoiceNetValue 
    FROM tckopf AS commissionInvoice 
    WHERE commissionInvoice.referenzid = 1 
     AND commissionInvoice.btyp = 5) 
- 
( SELECT IFNULL (SUM (commissionCreditNote.netto), 0) AS commissionCreditNoteNetValue 
    FROM tckopf AS commissionCreditNote 
    WHERE commissionCreditNote.referenzid = 1 
     AND commissionCreditNote.btyp = 6) 
AS commissionResult 

и поле к следующему выражению:

$F{commissionResult} 

и теперь я получаю желаемый результат.

0

я тонко вы можете исправить это с помощью внешнего соединения:

select ifnull(sum (cDoc.netto), 0) as cCNValue, CInvNoteVal.Val 
from tckopf as cDoc 
FULL OUTER JOIN 
    (select ifnull (sum (cDoc.netto), 0) AS Val, referenzid 
    from tckopf as cDoc 
    where cDoc.referenzid = $P{document_id} and cDoc.btyp = 7) as CInvNoteVal 
    ON CInvNoteVal.referenzid = cDoc.referenzid 
    where cDoc.referenzid = $P{document_id} and cDoc.btyp = 8 
+0

Это не работает, в iReport я получаю: «Недопустимый столбец или переменная: CInvNoteVal.referenzid'». –

+0

Какую версию SQL вы используете? – PeterRing

+0

Не знаю. Это FoxPro DBF, который используется в iReport через [драйвер HXTT JDBC] (http://www.hxtt.com/dbf/), и, похоже, это ["больше, чем SQL92"] (http: //www.hxtt .com/dbf.html). –

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