2014-02-04 3 views
0

Я пытаюсь получить due_amount из двух таблиц, которые являются счетами и offline_invoice.
Состояние есть; status not like 'paid%'. Я работаю с этим запросомПолучение SUM() из нескольких таблиц с условиями

select 
    (sum(i.total_amount) + sum(oi.invoice_amount)) - (sum(i.paid_amount) + sum(oi.paid_amount)) due_amount 
from 
    {CI}invoices i 
     left join 
    {CI}offline_invoice oi ON oi.customer_id = i.customer_id 
where 
    i.customer_id = ? 
     and i.status not like 'paid%' 
group by i.customer_id 

Но я не знаю, как я могу использовать условие на присоединяемой таблицы ({CI} offline_invoice)? Я должен использовать то же условие (status not like 'paid%').

+0

a.status = b.status и .status не нравится 'Paid%' –

+0

Я думаю, что левое соединение неверно, чтобы получить то, что вы хотите – vidaica

+0

@vidaica Скажите, пожалуйста, другую альтернативу, если вы знаете. –

ответ

1

Просто добавьте и в пункт слишком

left join 
    {CI}offline_invoice oi ON oi.customer_id = i.customer_id 
     AND oi.status not like 'paid%' 
where 
    i.customer_id = ? 
     and i.status not like 'paid%' 

Однако, я не знаю, как это будет работать для вас без возможного декартова воздействия. Скажем, у вас есть 10 текущих счетов и 10 и 6 автономных счетов-фактур. Я хотел бы сделать два отдельных предварительные агрегаты, соединенных их идентификатором клиента ... если офф-лайн счет не имеет такую ​​же счет-фактуру ID в качестве текущих (например, архивных целей)

select 
     CurInvoices.Customer_ID, 
     CurInvoices.InvBalance + COALESCE(OIInvoices.OIBalance, 0) as AllBalanceDue 
    from 
     (select i.customer_id, 
       sum(i.total_amount - i.paid_amount) as invBalance 
      from 
       {CI}invoices i 
      where 
        i.customer_id = ? 
       and i.status not like 'paid%' 
      group by 
       i.customer_ID) as CurInvoices 
     LEFT JOIN 
     (select oi.customer_id, 
       sum(oi.total_amount - oi.paid_amount) as OIBalance 
      from 
       {CI}offline_invoice oi 
      where 
        oi.customer_id = ? 
       and oi.status not like 'paid%' 
      group by 
       i.customer_ID) as OIInvoces 
     on CurInvoices.Customer_ID = OIInvoices.customer_ID 
+0

Я получаю 'NULL' после включения условия AND :( –

+0

@jogesh_pi, добавил другой запрос, который может помочь с декартовыми проблемами. – DRapp

+0

большое спасибо, это именно то, что я хочу –

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