2012-11-05 28 views
1

我試圖做出這個查詢,但即時通訊沒有運氣呢。表如下:集團發票交易價值大於或小於零

INVOICE 
ID | INVOICENUMBER | CUSTOMER | VALUE 
1 | 999 | 8 | 9000 
2 | 999 | 8 | 1000 


INVOICE_TRANSACTION 
InvoiceID | TYPE | VALUE 
1 | cust | 5000 
1 | cust | 2000 
2 | cust | 1000 
2 | cust | -1000 

INVOICE_DETAIL 
InvoiceID | PURCHASEORDERID 
1 | 7777 

PURCHASE_ORDER 
PURCHASEORDERID | ORDERTYPE 
7777 | gross 

PURCASE_ORDER_DETAILS 
PURCHASEORDERID | ROW | STATUS 
7777 | 1 | 1 
7777 | 2 | 2 
7777 | 3 | 3 

我想要的結果是這樣的:

INVOICE VALUE TRANSACTION VALUE PURCHASEORDERID ORDERTYPE HIGH STATUS LOW STATUS 
------- ----- ----------------- --------------- --------- ----------- ---------- 
1  9000 7000    7777   gross  3   1 

換句話說,我想要的結果,以組具有總invoice_transaction.value所有發票編號更大或更小,然後0。我對這一切都很陌生,任何人都可以幫我一把手讓我開始?

+1

我強烈建議建立一個[ sqlfiddle](http://sqlfiddle.com/)。 –

+1

你使用的是什麼sql(mysql,postgre,ms sql)?什麼版本? –

+0

'group by','trans_value <> 0'。其餘部分作爲OP的練習 –

回答

0

從INVOICE_TRANSACTION獲得發票IDS其中值不爲零,

SELECT InvoiceID 
FROM INVOICE_TRANSACTION 
GROUP BY InvoiceID 
HAVING SUM(VALUE) <> 0 
2

看起來像你想是這樣的:

select i.id, 
    sum(i.value) value, 
    it.value TransValue, 
    p.purchaseorderid, 
    p.ordertype, 
    pd.highstatus, 
    pd.lowstatus 
from invoice i 
left join 
(
    select sum(value) value, invoiceid 
    from invoice_transaction 
    group by invoiceid 
) it 
    on i.id = it.invoiceid 
left join invoice_detail id 
    on i.id = id.invoiceid 
left join purchase_order p 
    on id.purchaseorderid = p.purchaseorderid 
left join 
(
    select max(status) highStatus, min(status) LowStatus, 
    purchaseorderid 
    from purcase_order_details 
    group by purchaseorderid 
) pd 
    on p.purchaseorderid = pd.purchaseorderid 
where it.value <> 0 
group by i.id, p.purchaseorderid, p.ordertype; 

SQL Fiddle with Demo

相關問題