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.value0より大きいまたは小さいすべての請求書番号を結果にグループ化する必要があります。これはすべて初めてですが、誰かが私に手伝ってもらうことができますか?

4

2 に答える 2

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 を参照してください

于 2012-11-05T21:35:17.900 に答える
0

値がゼロではない INVOICE_TRANSACTION から請求書 ID を取得するには、

SELECT InvoiceID
FROM INVOICE_TRANSACTION
GROUP BY InvoiceID
HAVING SUM(VALUE) <> 0
于 2012-11-05T21:23:43.867 に答える